Selaa lähdekoodia

makes GeneratePublicKey method of PrivateKey

It makes a little bit more sense to have GeneratePublicKey as a method
of PrivateKey. In this case code doesn't need to check if caller
provided pointer is nil. Object was created by NewPrivateKey(), so it
code can assume object was correctly initialized.
The old GeneratePublicKey was returning an error when caller provided
pointer was nil. As this possibility is now removed, method doesn't
return error anymore.
trials/PERF
Henry Case 6 vuotta sitten
committed by Kris Kwiatkowski
vanhempi
commit
14dba93b7a
4 muutettua tiedostoa jossa 21 lisäystä ja 31 poistoa
  1. +6
    -11
      sidh/api.go
  2. +6
    -11
      sidh/sidh_test.go
  3. +3
    -3
      sike/sike.go
  4. +6
    -6
      sike/sike_test.go

+ 6
- 11
sidh/api.go Näytä tiedosto

@@ -164,19 +164,14 @@ func (prv *PrivateKey) Generate(rand io.Reader) error {
return err
}

// Generates public key corresponding to prv. KeyVariant of generated public key
// is same as PrivateKey. Fails only if prv was wrongly initialized.
// Constant time for properly initialzied PrivateKey
func GeneratePublicKey(prv *PrivateKey) (*PublicKey, error) {
if prv == nil {
return nil, errors.New("sidh: invalid arguments")
}

// Generates public key.
//
// Constant time.
func (prv *PrivateKey) GeneratePublicKey() (*PublicKey) {
if (prv.keyVariant & KeyVariant_SIDH_A) == KeyVariant_SIDH_A {
return publicKeyGenA(prv), nil
} else {
return publicKeyGenB(prv), nil
return publicKeyGenA(prv)
}
return publicKeyGenB(prv)
}

// Computes a shared secret which is a j-invariant. Function requires that pub has


+ 6
- 11
sidh/sidh_test.go Näytä tiedosto

@@ -93,10 +93,8 @@ func testKeygen(s *SidhParams, t *testing.T) {
expPubA := convToPub(PkA, KeyVariant_SIDH_A)
expPubB := convToPub(PkB, KeyVariant_SIDH_B)

pubA, err := GeneratePublicKey(alicePrivate)
checkErr(t, err, "public key A generation failed")
pubB, err := GeneratePublicKey(bobPrivate)
checkErr(t, err, "public key B generation failed")
pubA := alicePrivate.GeneratePublicKey()
pubB := bobPrivate.GeneratePublicKey()

if !bytes.Equal(pubA.Export(), expPubA.Export()) {
t.Fatalf("unexpected value of public key A")
@@ -119,11 +117,8 @@ func testRoundtrip(s *SidhParams, t *testing.T) {
checkErr(t, err, "key generation failed")

// Generate public keys
pubA, err := GeneratePublicKey(prvA)
checkErr(t, err, "")

pubB, err := GeneratePublicKey(prvB)
checkErr(t, err, "")
pubA := prvA.GeneratePublicKey()
pubB := prvB.GeneratePublicKey()

// Derive shared secret
s1, err := DeriveSecret(prvB, pubA)
@@ -317,7 +312,7 @@ func BenchmarkAliceKeyGenPub(b *testing.B) {
prv := NewPrivateKey(params.Id, KeyVariant_SIDH_A)
prv.Generate(rand.Reader)
for n := 0; n < b.N; n++ {
GeneratePublicKey(prv)
prv.GeneratePublicKey()
}
}

@@ -325,7 +320,7 @@ func BenchmarkBobKeyGenPub(b *testing.B) {
prv := NewPrivateKey(params.Id, KeyVariant_SIDH_B)
prv.Generate(rand.Reader)
for n := 0; n < b.N; n++ {
GeneratePublicKey(prv)
prv.GeneratePublicKey()
}
}



+ 3
- 3
sike/sike.go Näytä tiedosto

@@ -71,7 +71,7 @@ func Encrypt(rng io.Reader, pub *PublicKey, ptext []byte) ([]byte, error) {
return nil, err
}

pkA, _ := GeneratePublicKey(skA) // Never fails
pkA := skA.GeneratePublicKey()
return encrypt(skA, pkA, pub, ptext)
}

@@ -152,7 +152,7 @@ func Encapsulate(rng io.Reader, pub *PublicKey) (ctext []byte, secret []byte, er
return nil, nil, err
}

pkA, _ := GeneratePublicKey(skA) // Never fails
pkA := skA.GeneratePublicKey()
ctext, err = encrypt(skA, pkA, pub, ptext)
if err != nil {
return nil, nil, err
@@ -197,7 +197,7 @@ func Decapsulate(prv *PrivateKey, pub *PublicKey, ctext []byte) ([]byte, error)
skA.Import(r)

// Never fails
pkA, _ := GeneratePublicKey(skA)
pkA := skA.GeneratePublicKey()
c0 := pkA.Export()

h = cshake.NewCShake256(nil, H)


+ 6
- 6
sike/sike_test.go Näytä tiedosto

@@ -77,7 +77,7 @@ func TestPKEKeyGeneration(t *testing.T) {
sk := NewPrivateKey(params.Id, KeyVariant_SIKE)
err = sk.Generate(rand.Reader)
checkErr(t, err, "PEK key generation")
pk, _ := GeneratePublicKey(sk)
pk := sk.GeneratePublicKey()

// Try to encrypt
ct, err := Encrypt(rand.Reader, pk, msg[:])
@@ -99,7 +99,7 @@ func TestNegativePKE(t *testing.T) {
err = sk.Generate(rand.Reader)
checkErr(t, err, "key generation")

pk, _ := GeneratePublicKey(sk)
pk := sk.GeneratePublicKey()

ct, err := Encrypt(rand.Reader, pk, msg[:39])
if err == nil {
@@ -152,7 +152,7 @@ func TestKEMKeyGeneration(t *testing.T) {
// Generate key
sk := NewPrivateKey(params.Id, KeyVariant_SIKE)
checkErr(t, sk.Generate(rand.Reader), "error: key generation")
pk, _ := GeneratePublicKey(sk)
pk := sk.GeneratePublicKey()

// calculated shared secret
ct, ss_e, err := Encapsulate(rand.Reader, pk)
@@ -168,7 +168,7 @@ func TestKEMKeyGeneration(t *testing.T) {
func TestNegativeKEM(t *testing.T) {
sk := NewPrivateKey(params.Id, KeyVariant_SIKE)
checkErr(t, sk.Generate(rand.Reader), "error: key generation")
pk, _ := GeneratePublicKey(sk)
pk := sk.GeneratePublicKey()

ct, ss_e, err := Encapsulate(rand.Reader, pk)
checkErr(t, err, "pre-requisite for a test failed")
@@ -201,7 +201,7 @@ func TestNegativeKEM(t *testing.T) {
func TestNegativeKEMSameWrongResult(t *testing.T) {
sk := NewPrivateKey(params.Id, KeyVariant_SIKE)
checkErr(t, sk.Generate(rand.Reader), "error: key generation")
pk, _ := GeneratePublicKey(sk)
pk := sk.GeneratePublicKey()

ct, encSs, err := Encapsulate(rand.Reader, pk)
checkErr(t, err, "pre-requisite for a test failed")
@@ -261,7 +261,7 @@ func testKeygen(pk, sk []byte) bool {
}

// Generate public key
pubKey, _ := GeneratePublicKey(prvKey)
pubKey := prvKey.GeneratePublicKey()
return bytes.Equal(pubKey.Export(), pk)
}



Ladataan…
Peruuta
Tallenna