public class PS18SignatureScheme extends java.lang.Object implements SignatureScheme
| Constructor and Description |
|---|
PS18SignatureScheme(PSPublicParameters pp) |
PS18SignatureScheme(org.cryptimeleon.math.serialization.Representation repr) |
| Modifier and Type | Method and Description |
|---|---|
protected org.cryptimeleon.math.structures.groups.GroupElement |
computeLeftHandSide(MessageBlock messageBlock,
PS18VerificationKey pk,
org.cryptimeleon.math.structures.rings.zn.Zp.ZpElement exponentPrimeM,
org.cryptimeleon.math.structures.groups.GroupElement sigma1)
Computes left hand side of verification equation.
|
protected org.cryptimeleon.math.structures.groups.GroupElement |
computeSigma2(MessageBlock messageBlock,
PS18SigningKey sk,
org.cryptimeleon.math.structures.rings.zn.Zp.ZpElement exponentPrimeM,
org.cryptimeleon.math.structures.groups.GroupElement sigma1)
Computes sigma_2 in paper.
|
boolean |
equals(java.lang.Object obj) |
SignatureKeyPair<PS18VerificationKey,PS18SigningKey> |
generateKeyPair(int numberOfMessages) |
int |
getMaxNumberOfBytesForMapToPlaintext()
Returns the maximal number of bytes that can be mapped injectively to a
PlainText by
SignatureScheme.mapToPlaintext(byte[], SigningKey) and SignatureScheme.mapToPlaintext(byte[], VerificationKey). |
PSPublicParameters |
getPp() |
org.cryptimeleon.math.serialization.Representation |
getRepresentation() |
int |
hashCode() |
protected MessageBlock |
mapToPlaintext(byte[] bytes,
int messageBlockLength) |
PlainText |
mapToPlaintext(byte[] bytes,
SigningKey sk)
Provides an injective mapping of the given bytes to a
PlainText usable with this scheme (which may be a
MessageBlock). |
PlainText |
mapToPlaintext(byte[] bytes,
VerificationKey pk)
Provides an injective mapping of the given bytes to a
PlainText usable with this scheme (which may be a
MessageBlock). |
PlainText |
restorePlainText(org.cryptimeleon.math.serialization.Representation repr) |
Signature |
restoreSignature(org.cryptimeleon.math.serialization.Representation repr) |
SigningKey |
restoreSigningKey(org.cryptimeleon.math.serialization.Representation repr) |
VerificationKey |
restoreVerificationKey(org.cryptimeleon.math.serialization.Representation repr) |
Signature |
sign(PlainText plainText,
SigningKey secretKey)
Signs the giving plaintext using the given signing key.
|
java.lang.Boolean |
verify(PlainText plainText,
Signature signature,
VerificationKey publicKey)
Verifies the given signature for the given plaintext using the given verification key.
|
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitrestoreFromRepresentation, sign, verifypublic PS18SignatureScheme(PSPublicParameters pp)
public PS18SignatureScheme(org.cryptimeleon.math.serialization.Representation repr)
public org.cryptimeleon.math.serialization.Representation getRepresentation()
getRepresentation in interface org.cryptimeleon.math.serialization.Representablepublic SignatureKeyPair<PS18VerificationKey,PS18SigningKey> generateKeyPair(int numberOfMessages)
public Signature sign(PlainText plainText, SigningKey secretKey)
SignatureSchemesign in interface SignatureSchemeplainText - the message to signsecretKey - the secret signing keyplainText computed using secretKeypublic java.lang.Boolean verify(PlainText plainText, Signature signature, VerificationKey publicKey)
SignatureSchemeverify in interface SignatureSchemeplainText - the plaintext the signature should validate againstsignature - the signature to verifypublicKey - the verification key to verify withprotected org.cryptimeleon.math.structures.groups.GroupElement computeSigma2(MessageBlock messageBlock, PS18SigningKey sk, org.cryptimeleon.math.structures.rings.zn.Zp.ZpElement exponentPrimeM, org.cryptimeleon.math.structures.groups.GroupElement sigma1)
messageBlock - message to sign.sk - signing key.exponentPrimeM - m' in paper.sigma1 - \sigma_1 (also h) in paper.protected org.cryptimeleon.math.structures.groups.GroupElement computeLeftHandSide(MessageBlock messageBlock, PS18VerificationKey pk, org.cryptimeleon.math.structures.rings.zn.Zp.ZpElement exponentPrimeM, org.cryptimeleon.math.structures.groups.GroupElement sigma1)
messageBlock - message to verify signature for.pk - public verification keyexponentPrimeM - m' in paper. First element of signature (for 4.2) or computed from message
using random oracle (hash function) (for ROM from 4.3).sigma1 - \sigma_1 in paper. Either second or first element of signature (see above).public PlainText mapToPlaintext(byte[] bytes, SigningKey sk)
SignatureSchemePlainText usable with this scheme (which may be a
MessageBlock).
It only guarantees injectivity for arrays of the same length.
Applications that would like to use mapToPlaintext with multiple different array lengths
may want to devise a padding method and then only call mapToPlaintext with
byte arrays of the same (padded) length.
The contract is that VerificationKey pk and SigningKey sk are compatible
(in the sense that verify(m,sign(m, sk),pk) == true),
then mapToPlaintext(bytes, pk)) equals mapToPlaintext(bytes, sk) for all bytes.
mapToPlaintext in interface SignatureSchemebytes - bytes to be mapped to a PlainTextsk - the signing key for which the resulting PlainText should be valid
(note that the plaintext space may differ for different signing keys).public PlainText mapToPlaintext(byte[] bytes, VerificationKey pk)
SignatureSchemePlainText usable with this scheme (which may be a
MessageBlock).
It only guarantees injectivity for arrays of the same length.
Applications that would like to use mapToPlaintext with multiple different array lengths
may want to devise a padding method and then only call mapToPlaintext with
byte arrays of the same (padded) length.
The contract is that VerificationKey pk and SigningKey sk are compatible
(in the sense that verify(m,sign(m, sk),pk) == true),
then mapToPlaintext(bytes, pk)) equals mapToPlaintext(bytes, sk) for all bytes.
mapToPlaintext in interface SignatureSchemebytes - bytes to be mapped to a PlainTextpk - the verification key for which the resulting PlainText should be valid
(note that the plaintext space may differ for different verification keys).public int getMaxNumberOfBytesForMapToPlaintext()
SignatureSchemePlainText by
SignatureScheme.mapToPlaintext(byte[], SigningKey) and SignatureScheme.mapToPlaintext(byte[], VerificationKey).
As described in SignatureScheme.mapToPlaintext(byte[], org.cryptimeleon.craco.sig.VerificationKey) there might be no injective PlainText for some byte arrays, e.g.
if the byte array is too long. Therefore, this method provides the maximal number of bytes that can be mapped
injectively to a PlainText.
getMaxNumberOfBytesForMapToPlaintext in interface SignatureSchemeSignatureScheme.mapToPlaintext(byte[], org.cryptimeleon.craco.sig.VerificationKey).protected MessageBlock mapToPlaintext(byte[] bytes, int messageBlockLength)
public PlainText restorePlainText(org.cryptimeleon.math.serialization.Representation repr)
restorePlainText in interface SignatureSchemepublic Signature restoreSignature(org.cryptimeleon.math.serialization.Representation repr)
restoreSignature in interface SignatureSchemepublic SigningKey restoreSigningKey(org.cryptimeleon.math.serialization.Representation repr)
restoreSigningKey in interface SignatureSchemepublic VerificationKey restoreVerificationKey(org.cryptimeleon.math.serialization.Representation repr)
restoreVerificationKey in interface SignatureSchemepublic PSPublicParameters getPp()
public int hashCode()
hashCode in class java.lang.Objectpublic boolean equals(java.lang.Object obj)
equals in class java.lang.Object