2017-06-22 2 views
3

Ich muss die Signatur, die remote, durch ECDSA secp256k1 Kurve generiert validieren. Ich bekomme 64 Bytes, die die rohen Bytes von r und s darstellen. Und der ANSI X9.62 codierte öffentliche Schlüssel ([0x04, X (32 bytes), Y (32 bytes)]). Wie kann ich die Signatur anhand dieser Daten überprüfen?Constructing ECPublicKey von ANSI X9.62 codierten Bytes

Antwort

1

Angenommen, Sie schon x und y als BigIntegers haben:

// Create the W point 
ECPoint w = new ECPoint(x, y); 

// Create the ECField from hey integer (p) 
ECField field = new ECFieldFp(new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16)); 

// Create the EllipticCurve with a and b 
EllipticCurve curve = new EllipticCurve(field, new BigInteger("0"), new BigInteger("7")); 

// Create the G point: 
BigInteger gx = new BigInteger("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16); 
    BigInteger gy = new BigInteger("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 16); 
ECPoint g = new ECPoint(gx, gy); 

// Create ECParameterSpec 
ECParameterSpec spec = new ECParameterSpec(curve, new ECPoint(gx, gy), new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16), 1); 

// Create the KeySpec: 
KeySpec keySpec = new ECPublicKeySpec(w, spec); 

// Generate the key 
KeyFactory keyFactory = KeyFactory.getInstance("EC"); 
PublicKey key = keyFactory.generatePublic(keySpec); 

Die Konstanten hier verwendet verfügbar sind here

Verwandte Themen