diff --git a/src/main/java/com/danubetech/keyformats/crypto/PublicKeyVerifierFactory.java b/src/main/java/com/danubetech/keyformats/crypto/PublicKeyVerifierFactory.java index 4385460..4765d7c 100644 --- a/src/main/java/com/danubetech/keyformats/crypto/PublicKeyVerifierFactory.java +++ b/src/main/java/com/danubetech/keyformats/crypto/PublicKeyVerifierFactory.java @@ -37,10 +37,10 @@ public static PublicKeyVerifier publicKeyVerifierForKey(KeyTypeName keyTypeNa if (JWSAlgorithm.ES256KCC.equals(algorithm)) return new secp256k1_ES256KCC_PublicKeyVerifier((ECKey) publicKey); } else if (KeyTypeName.Bls12381G1.equals(keyTypeName)) { - if (JWSAlgorithm.BBSPlus.equals(algorithm)) return new Bls12381G1_BBSPlus_PublicKeyVerifier((bbs.signatures.KeyPair) publicKey); + if (JWSAlgorithm.BBSPlus.equals(algorithm)) return new Bls12381G1_BBSPlus_PublicKeyVerifier((byte[]) publicKey); } else if (KeyTypeName.Bls12381G2.equals(keyTypeName)) { - if (JWSAlgorithm.BBSPlus.equals(algorithm)) return new Bls12381G2_BBSPlus_PublicKeyVerifier((bbs.signatures.KeyPair) publicKey); + if (JWSAlgorithm.BBSPlus.equals(algorithm)) return new Bls12381G2_BBSPlus_PublicKeyVerifier((byte[]) publicKey); } else if (KeyTypeName.Bls48581G1.equals(keyTypeName)) { if (JWSAlgorithm.BBSPlus.equals(algorithm)) return new Bls48581G1_BBSPlus_PublicKeyVerifier((bbs.signatures.KeyPair) publicKey); diff --git a/src/main/java/com/danubetech/keyformats/crypto/impl/BBSPlus_PrivateKeySigner.java b/src/main/java/com/danubetech/keyformats/crypto/impl/BBSPlus_PrivateKeySigner.java new file mode 100644 index 0000000..d5e514e --- /dev/null +++ b/src/main/java/com/danubetech/keyformats/crypto/impl/BBSPlus_PrivateKeySigner.java @@ -0,0 +1,45 @@ +package com.danubetech.keyformats.crypto.impl; + +import bbs.signatures.Bbs; +import bbs.signatures.KeyPair; +import com.danubetech.keyformats.crypto.PrivateKeySigner; +import com.danubetech.keyformats.jose.JWSAlgorithm; + +import java.security.GeneralSecurityException; +import java.util.List; + +public class BBSPlus_PrivateKeySigner extends PrivateKeySigner { + + private final byte[] publicKey; + + public BBSPlus_PrivateKeySigner(KeyPair keyPair) { + super( keyPair.secretKey, JWSAlgorithm.BBSPlus); + int keySize = Bbs.getSecretKeySize(); + if (keyPair.secretKey.length != keySize) { + throw new IllegalArgumentException("wrong key size: expected: " + keySize + "but was " + keyPair.secretKey.length); + } + publicKey = keyPair.publicKey; + } + + @Override + public byte[] sign(byte[] content) throws GeneralSecurityException { + return sign(List.of(content)); + } + + public final byte[] sign(List content, String algorithm) throws GeneralSecurityException { + + if (! algorithm.equals(getAlgorithm())) throw new GeneralSecurityException("Unexpected algorithm " + algorithm + " is different from " + getAlgorithm()); + + return this.sign(content); + } + + public byte[] sign(List content) throws GeneralSecurityException { + try { + return Bbs.blsSign(getPrivateKey(), publicKey, content.toArray(new byte[content.size()][])); + } catch (GeneralSecurityException ex) { + throw ex; + } catch (Exception ex) { + throw new GeneralSecurityException(ex.getMessage(), ex); + } + } +} diff --git a/src/main/java/com/danubetech/keyformats/crypto/impl/BBSPlus_PublicKeyVerifier.java b/src/main/java/com/danubetech/keyformats/crypto/impl/BBSPlus_PublicKeyVerifier.java new file mode 100644 index 0000000..3ed655b --- /dev/null +++ b/src/main/java/com/danubetech/keyformats/crypto/impl/BBSPlus_PublicKeyVerifier.java @@ -0,0 +1,38 @@ +package com.danubetech.keyformats.crypto.impl; + +import bbs.signatures.Bbs; +import com.danubetech.keyformats.crypto.PublicKeyVerifier; +import com.danubetech.keyformats.jose.JWSAlgorithm; + +import java.security.GeneralSecurityException; +import java.util.List; + +public class BBSPlus_PublicKeyVerifier extends PublicKeyVerifier { + + public BBSPlus_PublicKeyVerifier(byte[] publicKey) { + super(publicKey, JWSAlgorithm.BBSPlus); + } + + @Override + public boolean verify(byte[] content, byte[] signature) throws GeneralSecurityException { + return verify(List.of(content), signature); + } + + public final boolean verify(List content, byte[] signature, String algorithm) throws GeneralSecurityException { + if (!algorithm.equals(getAlgorithm())) { + throw new GeneralSecurityException("Unexpected algorithm " + algorithm + " is different from " + getAlgorithm()); + } + return this.verify(content, signature); + } + + public boolean verify(List content, byte[] signature) throws GeneralSecurityException { + try { + return Bbs.blsVerify(getPublicKey(), signature, content.toArray(new byte[content.size()][])); + } catch (GeneralSecurityException ex) { + throw ex; + } catch (Exception ex) { + throw new GeneralSecurityException(ex.getMessage(), ex); + } + } + +} diff --git a/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G1_BBSPlus_PrivateKeySigner.java b/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G1_BBSPlus_PrivateKeySigner.java index 29eb346..53d07a4 100644 --- a/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G1_BBSPlus_PrivateKeySigner.java +++ b/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G1_BBSPlus_PrivateKeySigner.java @@ -7,25 +7,9 @@ import java.security.GeneralSecurityException; -public class Bls12381G1_BBSPlus_PrivateKeySigner extends PrivateKeySigner { +public class Bls12381G1_BBSPlus_PrivateKeySigner extends BBSPlus_PrivateKeySigner { - public Bls12381G1_BBSPlus_PrivateKeySigner(KeyPair privateKey) { - - super(privateKey, JWSAlgorithm.BBSPlus); - } - - @Override - public byte[] sign(byte[] content) throws GeneralSecurityException { - - try { - - return Bbs.blsSign(this.getPrivateKey().secretKey, this.getPrivateKey().publicKey, new byte[][]{content}); - } catch (GeneralSecurityException ex) { - - throw ex; - } catch (Exception ex) { - - throw new GeneralSecurityException(ex.getMessage(), ex); - } + public Bls12381G1_BBSPlus_PrivateKeySigner(KeyPair keyPair) { + super(keyPair); } } diff --git a/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G1_BBSPlus_PublicKeyVerifier.java b/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G1_BBSPlus_PublicKeyVerifier.java index 0831332..418e7c9 100644 --- a/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G1_BBSPlus_PublicKeyVerifier.java +++ b/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G1_BBSPlus_PublicKeyVerifier.java @@ -1,31 +1,14 @@ package com.danubetech.keyformats.crypto.impl; import bbs.signatures.Bbs; -import bbs.signatures.KeyPair; -import com.danubetech.keyformats.crypto.PublicKeyVerifier; -import com.danubetech.keyformats.jose.JWSAlgorithm; -import java.security.GeneralSecurityException; +public class Bls12381G1_BBSPlus_PublicKeyVerifier extends BBSPlus_PublicKeyVerifier { -public class Bls12381G1_BBSPlus_PublicKeyVerifier extends PublicKeyVerifier { - - public Bls12381G1_BBSPlus_PublicKeyVerifier(KeyPair publicKey) { - - super(publicKey, JWSAlgorithm.BBSPlus); - } - - @Override - public boolean verify(byte[] content, byte[] signature) throws GeneralSecurityException { - - try { - - return Bbs.blsVerify(this.getPublicKey().publicKey, signature, new byte[][]{signature}); - } catch (GeneralSecurityException ex) { - - throw ex; - } catch (Exception ex) { - - throw new GeneralSecurityException(ex.getMessage(), ex); + public Bls12381G1_BBSPlus_PublicKeyVerifier(byte[] publicKey) { + super(publicKey); + int keySize = Bbs.getBls12381G1PublicKeySize(); + if (publicKey.length != keySize) { + throw new IllegalArgumentException("wrong key size: expected: " + keySize + "but was " + publicKey.length); } } } diff --git a/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G2_BBSPlus_PrivateKeySigner.java b/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G2_BBSPlus_PrivateKeySigner.java index 969a6bf..a730eee 100644 --- a/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G2_BBSPlus_PrivateKeySigner.java +++ b/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G2_BBSPlus_PrivateKeySigner.java @@ -7,25 +7,9 @@ import java.security.GeneralSecurityException; -public class Bls12381G2_BBSPlus_PrivateKeySigner extends PrivateKeySigner { +public class Bls12381G2_BBSPlus_PrivateKeySigner extends BBSPlus_PrivateKeySigner { - public Bls12381G2_BBSPlus_PrivateKeySigner(KeyPair privateKey) { - - super(privateKey, JWSAlgorithm.BBSPlus); - } - - @Override - public byte[] sign(byte[] content) throws GeneralSecurityException { - - try { - - return Bbs.blsSign(this.getPrivateKey().secretKey, this.getPrivateKey().publicKey, new byte[][]{content}); - } catch (GeneralSecurityException ex) { - - throw ex; - } catch (Exception ex) { - - throw new GeneralSecurityException(ex.getMessage(), ex); - } + public Bls12381G2_BBSPlus_PrivateKeySigner(KeyPair keyPair) { + super(keyPair); } } diff --git a/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G2_BBSPlus_PublicKeyVerifier.java b/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G2_BBSPlus_PublicKeyVerifier.java index 702f09d..3978e18 100644 --- a/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G2_BBSPlus_PublicKeyVerifier.java +++ b/src/main/java/com/danubetech/keyformats/crypto/impl/Bls12381G2_BBSPlus_PublicKeyVerifier.java @@ -7,25 +7,12 @@ import java.security.GeneralSecurityException; -public class Bls12381G2_BBSPlus_PublicKeyVerifier extends PublicKeyVerifier { - - public Bls12381G2_BBSPlus_PublicKeyVerifier(KeyPair publicKey) { - - super(publicKey, JWSAlgorithm.BBSPlus); - } - - @Override - public boolean verify(byte[] content, byte[] signature) throws GeneralSecurityException { - - try { - - return Bbs.blsVerify(this.getPublicKey().publicKey, signature, new byte[][]{signature}); - } catch (GeneralSecurityException ex) { - - throw ex; - } catch (Exception ex) { - - throw new GeneralSecurityException(ex.getMessage(), ex); +public class Bls12381G2_BBSPlus_PublicKeyVerifier extends BBSPlus_PublicKeyVerifier { + public Bls12381G2_BBSPlus_PublicKeyVerifier(byte[] publicKey) { + super(publicKey); + int keySize = Bbs.getBls12381G2PublicKeySize(); + if (publicKey.length != keySize) { + throw new IllegalArgumentException("wrong key size: expected: " + keySize + "but was " + publicKey.length); } } }