ソースを参照

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年前
committed by Kris Kwiatkowski
コミット
14dba93b7a
4個のファイルの変更21行の追加31行の削除
  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 ファイルの表示

@@ -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 ファイルの表示

@@ -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 ファイルの表示

@@ -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 ファイルの表示

@@ -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)
}



読み込み中…
キャンセル
保存