All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.crypto.agreement.jpake.JPAKERound1Payload Maven / Gradle / Ivy

Go to download

The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5 to JDK 1.7. Note: this package includes the IDEA and NTRU encryption algorithms.

There is a newer version: 1.70
Show newest version
package org.bouncycastle.crypto.agreement.jpake;

import java.io.Serializable;
import java.math.BigInteger;

import org.bouncycastle.util.Arrays;

/**
 * The payload sent/received during the first round of a J-PAKE exchange.
 * 

*

* Each {@link JPAKEParticipant} creates and sends an instance * of this payload to the other {@link JPAKEParticipant}. * The payload to send should be created via * {@link JPAKEParticipant#createRound1PayloadToSend()}. *

*

* Each {@link JPAKEParticipant} must also validate the payload * received from the other {@link JPAKEParticipant}. * The received payload should be validated via * {@link JPAKEParticipant#validateRound1PayloadReceived(JPAKERound1Payload)}. *

*

* This class is {@link Serializable}, so you can send it via Java serialization. * However, no specific mechanism for sending this payload to the other participant * is required. It is perfectly safe to decompose the fields of this payload, * send those fields to the other participant in any format, * and reconstruct the payload on the other side using * {@link #JPAKERound1Payload(String, BigInteger, BigInteger, BigInteger[], BigInteger[])}. */ public class JPAKERound1Payload implements Serializable { private static final long serialVersionUID = 1L; /** * The id of the {@link JPAKEParticipant} who created/sent this payload. */ private final String participantId; /** * The value of g^x1 */ private final BigInteger gx1; /** * The value of g^x2 */ private final BigInteger gx2; /** * The zero knowledge proof for x1. *

* This is a two element array, containing {g^v, r} for x1. */ private final BigInteger[] knowledgeProofForX1; /** * The zero knowledge proof for x2. *

* This is a two element array, containing {g^v, r} for x2. */ private final BigInteger[] knowledgeProofForX2; public JPAKERound1Payload( String participantId, BigInteger gx1, BigInteger gx2, BigInteger[] knowledgeProofForX1, BigInteger[] knowledgeProofForX2) { JPAKEUtil.validateNotNull(participantId, "participantId"); JPAKEUtil.validateNotNull(gx1, "gx1"); JPAKEUtil.validateNotNull(gx2, "gx2"); JPAKEUtil.validateNotNull(knowledgeProofForX1, "knowledgeProofForX1"); JPAKEUtil.validateNotNull(knowledgeProofForX2, "knowledgeProofForX2"); this.participantId = participantId; this.gx1 = gx1; this.gx2 = gx2; this.knowledgeProofForX1 = Arrays.copyOf(knowledgeProofForX1, knowledgeProofForX1.length); this.knowledgeProofForX2 = Arrays.copyOf(knowledgeProofForX2, knowledgeProofForX2.length); } public String getParticipantId() { return participantId; } public BigInteger getGx1() { return gx1; } public BigInteger getGx2() { return gx2; } public BigInteger[] getKnowledgeProofForX1() { return Arrays.copyOf(knowledgeProofForX1, knowledgeProofForX1.length); } public BigInteger[] getKnowledgeProofForX2() { return Arrays.copyOf(knowledgeProofForX2, knowledgeProofForX2.length); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy