* rework dsa test

* add initial ed25519 (not done)

* fix common.Certificate compile error

* add more functions to crypto.SigningPrivateKey interface, not everyone implements them yet
This commit is contained in:
Jeff Becker
2016-01-29 08:36:04 -05:00
parent 6fcab3b7dd
commit 5d043d79e7
7 changed files with 182 additions and 31 deletions

View File

@ -42,7 +42,7 @@ var param = dsa.Parameters{
}
// generate a dsa keypair
func DSAGenerate(priv *dsa.PrivateKey, rand io.Reader) error {
func generateDSA(priv *dsa.PrivateKey, rand io.Reader) error {
// put our paramters in
priv.P = param.P
priv.Q = param.Q
@ -60,16 +60,19 @@ func createDSAPublicKey(Y *big.Int) *dsa.PublicKey {
}
// createa i2p dsa private key given its public component
func createDSAPrivkey(X *big.Int) *dsa.PrivateKey {
Y := new(big.Int)
Y.Exp(dsag, X, dsap)
return &dsa.PrivateKey{
PublicKey: dsa.PublicKey{
Parameters: param,
Y: Y,
},
X: X,
func createDSAPrivkey(X *big.Int) (k *dsa.PrivateKey) {
if X.Cmp(dsap) == -1 {
Y := new(big.Int)
Y.Exp(dsag, X, dsap)
k = &dsa.PrivateKey{
PublicKey: dsa.PublicKey{
Parameters: param,
Y: Y,
},
X: X,
}
}
return
}
type DSAVerifier struct {
@ -128,6 +131,26 @@ func (k DSAPrivateKey) NewSigner() (s Signer, err error) {
return
}
func (k DSAPrivateKey) Public() (pk DSAPublicKey, err error) {
p := createDSAPrivkey(new(big.Int).SetBytes(k[:]))
if p == nil {
err = ErrInvalidKeyFormat
} else {
copy(pk[:], p.Y.Bytes())
}
return
}
func (k DSAPrivateKey) Generate() (s DSAPrivateKey, err error) {
dk := new(dsa.PrivateKey)
err = generateDSA(dk, rand.Reader)
if err == nil {
copy(k[:], dk.X.Bytes())
s = k
}
return
}
func (ds *DSASigner) Sign(data []byte) (sig []byte, err error) {
h := sha1.Sum(data)
sig, err = ds.SignHash(h[:])