@@ -53,6 +53,7 @@ func (s shortKEM) DeriveKeyPair(seed []byte) (kem.PublicKey, kem.PrivateKey) {
53
53
bitmask = 0x01
54
54
}
55
55
56
+ Nsk := s .PrivateKeySize ()
56
57
dkpPrk := s .labeledExtract ([]byte ("" ), []byte ("dkp_prk" ), seed )
57
58
var bytes []byte
58
59
ctr := 0
@@ -64,14 +65,12 @@ func (s shortKEM) DeriveKeyPair(seed []byte) (kem.PublicKey, kem.PrivateKey) {
64
65
dkpPrk ,
65
66
[]byte ("candidate" ),
66
67
[]byte {byte (ctr )},
67
- uint16 (s . byteSize () ),
68
+ uint16 (Nsk ),
68
69
)
69
70
bytes [0 ] &= bitmask
70
71
skBig .SetBytes (bytes )
71
72
}
72
- l := s .PrivateKeySize ()
73
- sk := & shortKEMPrivKey {s , make ([]byte , l ), nil }
74
- copy (sk .priv [l - len (bytes ):], bytes )
73
+ sk := & shortKEMPrivKey {s , bytes , nil }
75
74
return sk .Public (), sk
76
75
}
77
76
@@ -83,11 +82,11 @@ func (s shortKEM) GenerateKeyPair() (kem.PublicKey, kem.PrivateKey, error) {
83
82
84
83
func (s shortKEM ) UnmarshalBinaryPrivateKey (data []byte ) (kem.PrivateKey , error ) {
85
84
l := s .PrivateKeySize ()
86
- if len (data ) < l {
87
- return nil , ErrInvalidKEMPrivateKey
85
+ if len (data ) != l {
86
+ return nil , kem . ErrPrivKeySize
88
87
}
89
88
sk := & shortKEMPrivKey {s , make ([]byte , l ), nil }
90
- copy (sk .priv [ l - len ( data ): l ] , data [:l ])
89
+ copy (sk .priv , data [:l ])
91
90
if ! sk .validate () {
92
91
return nil , ErrInvalidKEMPrivateKey
93
92
}
@@ -96,7 +95,11 @@ func (s shortKEM) UnmarshalBinaryPrivateKey(data []byte) (kem.PrivateKey, error)
96
95
}
97
96
98
97
func (s shortKEM ) UnmarshalBinaryPublicKey (data []byte ) (kem.PublicKey , error ) {
99
- x , y := elliptic .Unmarshal (s , data )
98
+ l := s .PublicKeySize ()
99
+ if len (data ) != l {
100
+ return nil , kem .ErrPubKeySize
101
+ }
102
+ x , y := elliptic .Unmarshal (s , data [:l ])
100
103
if x == nil {
101
104
return nil , ErrInvalidKEMPublicKey
102
105
}
0 commit comments