1// Copyright 2020 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package rsa_test
6
7import (
8	"crypto"
9	"crypto/rand"
10	"crypto/rsa"
11	"crypto/x509"
12	"testing"
13)
14
15func TestEqual(t *testing.T) {
16	private, _ := rsa.GenerateKey(rand.Reader, 512)
17	public := &private.PublicKey
18
19	if !public.Equal(public) {
20		t.Errorf("public key is not equal to itself: %v", public)
21	}
22	if !public.Equal(crypto.Signer(private).Public().(*rsa.PublicKey)) {
23		t.Errorf("private.Public() is not Equal to public: %q", public)
24	}
25	if !private.Equal(private) {
26		t.Errorf("private key is not equal to itself: %v", private)
27	}
28
29	enc, err := x509.MarshalPKCS8PrivateKey(private)
30	if err != nil {
31		t.Fatal(err)
32	}
33	decoded, err := x509.ParsePKCS8PrivateKey(enc)
34	if err != nil {
35		t.Fatal(err)
36	}
37	if !public.Equal(decoded.(crypto.Signer).Public()) {
38		t.Errorf("public key is not equal to itself after decoding: %v", public)
39	}
40	if !private.Equal(decoded) {
41		t.Errorf("private key is not equal to itself after decoding: %v", private)
42	}
43
44	other, _ := rsa.GenerateKey(rand.Reader, 512)
45	if public.Equal(other.Public()) {
46		t.Errorf("different public keys are Equal")
47	}
48	if private.Equal(other) {
49		t.Errorf("different private keys are Equal")
50	}
51}
52