key generation abstracted out, for testing with deterministic keys
This commit is contained in:
@ -2,9 +2,7 @@ package p2p
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
// "crypto/ecdsa"
|
||||
// "crypto/elliptic"
|
||||
// "crypto/rand"
|
||||
"crypto/ecdsa"
|
||||
"fmt"
|
||||
"net"
|
||||
"testing"
|
||||
@ -71,11 +69,60 @@ func TestSharedSecret(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCryptoHandshake(t *testing.T) {
|
||||
testCryptoHandshakeWithGen(false, t)
|
||||
}
|
||||
|
||||
func TestTokenCryptoHandshake(t *testing.T) {
|
||||
testCryptoHandshakeWithGen(true, t)
|
||||
}
|
||||
|
||||
func TestDetCryptoHandshake(t *testing.T) {
|
||||
defer testlog(t).detach()
|
||||
tmpkeyF := keyF
|
||||
keyF = detkeyF
|
||||
tmpnonceF := nonceF
|
||||
nonceF = detnonceF
|
||||
testCryptoHandshakeWithGen(false, t)
|
||||
keyF = tmpkeyF
|
||||
nonceF = tmpnonceF
|
||||
}
|
||||
|
||||
func TestDetTokenCryptoHandshake(t *testing.T) {
|
||||
defer testlog(t).detach()
|
||||
tmpkeyF := keyF
|
||||
keyF = detkeyF
|
||||
tmpnonceF := nonceF
|
||||
nonceF = detnonceF
|
||||
testCryptoHandshakeWithGen(true, t)
|
||||
keyF = tmpkeyF
|
||||
nonceF = tmpnonceF
|
||||
}
|
||||
|
||||
func testCryptoHandshakeWithGen(token bool, t *testing.T) {
|
||||
fmt.Printf("init-private-key: ")
|
||||
prv0, err := keyF()
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("rec-private-key: ")
|
||||
prv1, err := keyF()
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
return
|
||||
}
|
||||
var nonce []byte
|
||||
if token {
|
||||
fmt.Printf("session-token: ")
|
||||
nonce = make([]byte, shaLen)
|
||||
nonceF(nonce)
|
||||
}
|
||||
testCryptoHandshake(prv0, prv1, nonce, t)
|
||||
}
|
||||
|
||||
func testCryptoHandshake(prv0, prv1 *ecdsa.PrivateKey, sessionToken []byte, t *testing.T) {
|
||||
var err error
|
||||
var sessionToken []byte
|
||||
prv0, _ := crypto.GenerateKey() // = ecdsa.GenerateKey(crypto.S256(), rand.Reader)
|
||||
pub0 := &prv0.PublicKey
|
||||
prv1, _ := crypto.GenerateKey()
|
||||
pub1 := &prv1.PublicKey
|
||||
|
||||
pub0s := crypto.FromECDSAPub(pub0)
|
||||
@ -87,12 +134,14 @@ func TestCryptoHandshake(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
}
|
||||
fmt.Printf("-> %v\n", hexkey(auth))
|
||||
|
||||
// receiver reads auth and responds with response
|
||||
response, remoteRecNonce, remoteInitNonce, remoteRandomPrivKey, remoteInitRandomPubKey, err := respondToHandshake(auth, prv1, pub0s, sessionToken)
|
||||
if err != nil {
|
||||
t.Errorf("%v", err)
|
||||
}
|
||||
fmt.Printf("<- %v\n", hexkey(response))
|
||||
|
||||
// initiator reads receiver's response and the key exchange completes
|
||||
recNonce, remoteRandomPubKey, _, err := completeHandshake(response, prv0)
|
||||
@ -111,7 +160,7 @@ func TestCryptoHandshake(t *testing.T) {
|
||||
t.Errorf("%v", err)
|
||||
}
|
||||
|
||||
fmt.Printf("\nauth (%v) %x\n\nresp (%v) %x\n\n", len(auth), auth, len(response), response)
|
||||
// fmt.Printf("\nauth (%v) %x\n\nresp (%v) %x\n\n", len(auth), auth, len(response), response)
|
||||
|
||||
// fmt.Printf("\nauth %x\ninitNonce %x\nresponse%x\nremoteRecNonce %x\nremoteInitNonce %x\nremoteRandomPubKey %x\nrecNonce %x\nremoteInitRandomPubKey %x\ninitSessionToken %x\n\n", auth, initNonce, response, remoteRecNonce, remoteInitNonce, remoteRandomPubKey, recNonce, remoteInitRandomPubKey, initSessionToken)
|
||||
|
||||
|
Reference in New Issue
Block a user