diff --git a/implementors/core/clone/trait.Clone.js b/implementors/core/clone/trait.Clone.js
index 3183bfa..c6d0d8f 100644
--- a/implementors/core/clone/trait.Clone.js
+++ b/implementors/core/clone/trait.Clone.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl Clone for AuthenticationChallengeRequest"],["impl<T: Clone> Clone for AuthClient<T>"],["impl Clone for AuthenticationAnswerRequest"],["impl Clone for AuthenticationAnswerRequest"],["impl Clone for AuthenticationChallengeResponse"],["impl Clone for RegisterResponse"],["impl Clone for AuthenticationChallengeRequest"],["impl Clone for RegisterResponse"],["impl<T: Auth> Clone for AuthServer<T>"],["impl Clone for RegisterRequest"],["impl Clone for AuthenticationChallengeResponse"],["impl<T: Clone> Clone for AuthClient<T>"],["impl Clone for DiscreteLogChaumPedersen"],["impl Clone for RegisterRequest"],["impl<T: Clone> Clone for GroupParams<T>"],["impl<T: Auth> Clone for AuthServer<T>"],["impl Clone for AuthenticationAnswerResponse"],["impl Clone for AuthenticationAnswerResponse"]]
+"zk_pass":[["impl Clone for AuthenticationAnswerResponse"],["impl Clone for AuthenticationAnswerRequest"],["impl Clone for AuthenticationAnswerRequest"],["impl Clone for AuthenticationAnswerResponse"],["impl Clone for RegisterRequest"],["impl<T: Clone> Clone for AuthClient<T>"],["impl Clone for DiscreteLogChaumPedersen"],["impl Clone for AuthenticationChallengeRequest"],["impl<T: Auth> Clone for AuthServer<T>"],["impl Clone for AuthenticationChallengeResponse"],["impl<T: Clone> Clone for GroupParams<T>"],["impl Clone for AuthenticationChallengeResponse"],["impl Clone for RegisterResponse"],["impl Clone for RegisterResponse"],["impl Clone for RegisterRequest"],["impl<T: Auth> Clone for AuthServer<T>"],["impl<T: Clone> Clone for AuthClient<T>"],["impl Clone for AuthenticationChallengeRequest"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/cmp/trait.PartialEq.js b/implementors/core/cmp/trait.PartialEq.js
index 3824af4..6caec2b 100644
--- a/implementors/core/cmp/trait.PartialEq.js
+++ b/implementors/core/cmp/trait.PartialEq.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl PartialEq<AuthenticationChallengeResponse> for AuthenticationChallengeResponse"],["impl PartialEq<RegisterRequest> for RegisterRequest"],["impl PartialEq<RfcModpType> for RfcModpType"],["impl PartialEq<AuthenticationChallengeRequest> for AuthenticationChallengeRequest"],["impl PartialEq<AuthenticationAnswerRequest> for AuthenticationAnswerRequest"],["impl PartialEq<EllipticCurveType> for EllipticCurveType"],["impl PartialEq<AuthenticationAnswerResponse> for AuthenticationAnswerResponse"],["impl PartialEq<AuthenticationChallengeRequest> for AuthenticationChallengeRequest"],["impl PartialEq<AuthenticationChallengeResponse> for AuthenticationChallengeResponse"],["impl PartialEq<AuthenticationAnswerResponse> for AuthenticationAnswerResponse"],["impl PartialEq<ChaumPedersenType> for ChaumPedersenType"],["impl PartialEq<RegisterResponse> for RegisterResponse"],["impl PartialEq<RegisterResponse> for RegisterResponse"],["impl PartialEq<RegisterRequest> for RegisterRequest"],["impl PartialEq<AuthenticationAnswerRequest> for AuthenticationAnswerRequest"]]
+"zk_pass":[["impl PartialEq<AuthenticationAnswerRequest> for AuthenticationAnswerRequest"],["impl PartialEq<RegisterResponse> for RegisterResponse"],["impl PartialEq<AuthenticationChallengeResponse> for AuthenticationChallengeResponse"],["impl PartialEq<RegisterRequest> for RegisterRequest"],["impl PartialEq<ChaumPedersenType> for ChaumPedersenType"],["impl PartialEq<AuthenticationAnswerResponse> for AuthenticationAnswerResponse"],["impl PartialEq<RegisterResponse> for RegisterResponse"],["impl PartialEq<EllipticCurveType> for EllipticCurveType"],["impl PartialEq<AuthenticationChallengeResponse> for AuthenticationChallengeResponse"],["impl PartialEq<AuthenticationAnswerRequest> for AuthenticationAnswerRequest"],["impl PartialEq<AuthenticationAnswerResponse> for AuthenticationAnswerResponse"],["impl PartialEq<AuthenticationChallengeRequest> for AuthenticationChallengeRequest"],["impl PartialEq<RfcModpType> for RfcModpType"],["impl PartialEq<AuthenticationChallengeRequest> for AuthenticationChallengeRequest"],["impl PartialEq<RegisterRequest> for RegisterRequest"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/default/trait.Default.js b/implementors/core/default/trait.Default.js
index cd46aa8..41325ad 100644
--- a/implementors/core/default/trait.Default.js
+++ b/implementors/core/default/trait.Default.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl Default for RegisterResponse"],["impl Default for AuthenticationAnswerRequest"],["impl Default for AuthenticationChallengeRequest"],["impl Default for AuthenticationChallengeResponse"],["impl Default for AuthenticationChallengeResponse"],["impl Default for RegisterRequest"],["impl Default for RegisterRequest"],["impl Default for AuthenticationAnswerResponse"],["impl Default for AuthenticationAnswerRequest"],["impl Default for AuthenticationAnswerResponse"],["impl Default for AuthenticationChallengeRequest"],["impl Default for RegisterResponse"]]
+"zk_pass":[["impl Default for AuthenticationAnswerRequest"],["impl Default for RegisterRequest"],["impl Default for AuthenticationAnswerRequest"],["impl Default for RegisterResponse"],["impl Default for AuthenticationChallengeRequest"],["impl Default for RegisterRequest"],["impl Default for AuthenticationAnswerResponse"],["impl Default for AuthenticationAnswerResponse"],["impl Default for AuthenticationChallengeRequest"],["impl Default for AuthenticationChallengeResponse"],["impl Default for RegisterResponse"],["impl Default for AuthenticationChallengeResponse"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/fmt/trait.Debug.js b/implementors/core/fmt/trait.Debug.js
index f6b1a1a..23f56e0 100644
--- a/implementors/core/fmt/trait.Debug.js
+++ b/implementors/core/fmt/trait.Debug.js
@@ -1,5 +1,5 @@
(function() {var implementors = {
"client":[["impl Debug for Opt"]],
"server":[["impl Debug for Opt"]],
-"zk_pass":[["impl<T: Debug + Auth> Debug for AuthServer<T>"],["impl Debug for RegisterRequest"],["impl Debug for RegisterResponse"],["impl Debug for AuthenticationAnswerResponse"],["impl Debug for AuthenticationAnswerResponse"],["impl<T: Debug> Debug for GroupParams<T>"],["impl Debug for AuthenticationChallengeResponse"],["impl Debug for AuthenticationAnswerRequest"],["impl Debug for ChaumPedersenType"],["impl Debug for AuthenticationChallengeRequest"],["impl Debug for RegisterRequest"],["impl<T: Debug> Debug for AuthClient<T>"],["impl<T: Debug> Debug for AuthClient<T>"],["impl Debug for RfcModpType"],["impl Debug for RegisterResponse"],["impl Debug for AuthenticationChallengeResponse"],["impl Debug for EllipticCurveType"],["impl Debug for AuthenticationChallengeRequest"],["impl Debug for AuthenticationAnswerRequest"],["impl<T: Debug + Auth> Debug for AuthServer<T>"]]
+"zk_pass":[["impl Debug for AuthenticationChallengeRequest"],["impl Debug for EllipticCurveType"],["impl Debug for AuthenticationChallengeResponse"],["impl Debug for RegisterResponse"],["impl Debug for AuthenticationAnswerResponse"],["impl<T: Debug + Auth> Debug for AuthServer<T>"],["impl Debug for RegisterRequest"],["impl Debug for ChaumPedersenType"],["impl Debug for AuthenticationChallengeRequest"],["impl Debug for RegisterResponse"],["impl Debug for AuthenticationAnswerRequest"],["impl<T: Debug> Debug for AuthClient<T>"],["impl Debug for RegisterRequest"],["impl Debug for AuthenticationAnswerRequest"],["impl<T: Debug> Debug for GroupParams<T>"],["impl Debug for AuthenticationAnswerResponse"],["impl<T: Debug + Auth> Debug for AuthServer<T>"],["impl Debug for AuthenticationChallengeResponse"],["impl<T: Debug> Debug for AuthClient<T>"],["impl Debug for RfcModpType"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/fmt/trait.Display.js b/implementors/core/fmt/trait.Display.js
index c05ef69..773772b 100644
--- a/implementors/core/fmt/trait.Display.js
+++ b/implementors/core/fmt/trait.Display.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl Display for EllipticCurveType"],["impl Display for ChaumPedersenType"],["impl Display for RfcModpType"]]
+"zk_pass":[["impl Display for ChaumPedersenType"],["impl Display for EllipticCurveType"],["impl Display for RfcModpType"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/marker/trait.StructuralPartialEq.js b/implementors/core/marker/trait.StructuralPartialEq.js
index bb09de8..8e979fa 100644
--- a/implementors/core/marker/trait.StructuralPartialEq.js
+++ b/implementors/core/marker/trait.StructuralPartialEq.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl StructuralPartialEq for RegisterRequest"],["impl StructuralPartialEq for AuthenticationChallengeRequest"],["impl StructuralPartialEq for ChaumPedersenType"],["impl StructuralPartialEq for AuthenticationAnswerRequest"],["impl StructuralPartialEq for AuthenticationAnswerResponse"],["impl StructuralPartialEq for AuthenticationChallengeRequest"],["impl StructuralPartialEq for RegisterResponse"],["impl StructuralPartialEq for AuthenticationAnswerResponse"],["impl StructuralPartialEq for EllipticCurveType"],["impl StructuralPartialEq for RegisterResponse"],["impl StructuralPartialEq for AuthenticationChallengeResponse"],["impl StructuralPartialEq for AuthenticationAnswerRequest"],["impl StructuralPartialEq for RegisterRequest"],["impl StructuralPartialEq for RfcModpType"],["impl StructuralPartialEq for AuthenticationChallengeResponse"]]
+"zk_pass":[["impl StructuralPartialEq for AuthenticationChallengeResponse"],["impl StructuralPartialEq for AuthenticationChallengeRequest"],["impl StructuralPartialEq for RfcModpType"],["impl StructuralPartialEq for RegisterResponse"],["impl StructuralPartialEq for AuthenticationAnswerResponse"],["impl StructuralPartialEq for RegisterRequest"],["impl StructuralPartialEq for RegisterRequest"],["impl StructuralPartialEq for AuthenticationChallengeResponse"],["impl StructuralPartialEq for AuthenticationAnswerResponse"],["impl StructuralPartialEq for RegisterResponse"],["impl StructuralPartialEq for AuthenticationAnswerRequest"],["impl StructuralPartialEq for AuthenticationAnswerRequest"],["impl StructuralPartialEq for AuthenticationChallengeRequest"],["impl StructuralPartialEq for ChaumPedersenType"],["impl StructuralPartialEq for EllipticCurveType"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/ops/deref/trait.Deref.js b/implementors/core/ops/deref/trait.Deref.js
index 055cb34..4b2ebde 100644
--- a/implementors/core/ops/deref/trait.Deref.js
+++ b/implementors/core/ops/deref/trait.Deref.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl Deref for PALLAS_GROUP_PARAMS"],["impl Deref for RFC5114_MODP_2048_224_BIT_PARAMS"],["impl Deref for EC25519_GROUP_PARAMS"],["impl Deref for RFC5114_MODP_2048_256_BIT_PARAMS"],["impl Deref for RFC5114_MODP_1024_160_BIT_PARAMS"],["impl Deref for VESTA_GROUP_PARAMS"]]
+"zk_pass":[["impl Deref for RFC5114_MODP_2048_256_BIT_PARAMS"],["impl Deref for PALLAS_GROUP_PARAMS"],["impl Deref for VESTA_GROUP_PARAMS"],["impl Deref for RFC5114_MODP_1024_160_BIT_PARAMS"],["impl Deref for RFC5114_MODP_2048_224_BIT_PARAMS"],["impl Deref for EC25519_GROUP_PARAMS"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/str/traits/trait.FromStr.js b/implementors/core/str/traits/trait.FromStr.js
index 4d6bf2e..9853892 100644
--- a/implementors/core/str/traits/trait.FromStr.js
+++ b/implementors/core/str/traits/trait.FromStr.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl FromStr for GroupParams<Point>"],["impl FromStr for ChaumPedersenType"],["impl FromStr for GroupParams<BigUint>"],["impl FromStr for RfcModpType"],["impl FromStr for GroupParams<RistrettoPoint>"],["impl FromStr for EllipticCurveType"],["impl FromStr for GroupParams<Point>"]]
+"zk_pass":[["impl FromStr for EllipticCurveType"],["impl FromStr for RfcModpType"],["impl FromStr for GroupParams<Point>"],["impl FromStr for ChaumPedersenType"],["impl FromStr for GroupParams<RistrettoPoint>"],["impl FromStr for GroupParams<Point>"],["impl FromStr for GroupParams<BigUint>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/lazy_static/trait.LazyStatic.js b/implementors/lazy_static/trait.LazyStatic.js
index 686bc9a..3179645 100644
--- a/implementors/lazy_static/trait.LazyStatic.js
+++ b/implementors/lazy_static/trait.LazyStatic.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl LazyStatic for RFC5114_MODP_2048_256_BIT_PARAMS"],["impl LazyStatic for RFC5114_MODP_1024_160_BIT_PARAMS"],["impl LazyStatic for VESTA_GROUP_PARAMS"],["impl LazyStatic for RFC5114_MODP_2048_224_BIT_PARAMS"],["impl LazyStatic for PALLAS_GROUP_PARAMS"],["impl LazyStatic for EC25519_GROUP_PARAMS"]]
+"zk_pass":[["impl LazyStatic for PALLAS_GROUP_PARAMS"],["impl LazyStatic for RFC5114_MODP_1024_160_BIT_PARAMS"],["impl LazyStatic for RFC5114_MODP_2048_224_BIT_PARAMS"],["impl LazyStatic for VESTA_GROUP_PARAMS"],["impl LazyStatic for EC25519_GROUP_PARAMS"],["impl LazyStatic for RFC5114_MODP_2048_256_BIT_PARAMS"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/prost/message/trait.Message.js b/implementors/prost/message/trait.Message.js
index 4b486ff..4ebf9cb 100644
--- a/implementors/prost/message/trait.Message.js
+++ b/implementors/prost/message/trait.Message.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl Message for AuthenticationChallengeRequest"],["impl Message for AuthenticationAnswerRequest"],["impl Message for AuthenticationAnswerRequest"],["impl Message for AuthenticationChallengeResponse"],["impl Message for AuthenticationAnswerResponse"],["impl Message for RegisterRequest"],["impl Message for AuthenticationChallengeRequest"],["impl Message for AuthenticationChallengeResponse"],["impl Message for RegisterRequest"],["impl Message for AuthenticationAnswerResponse"],["impl Message for RegisterResponse"],["impl Message for RegisterResponse"]]
+"zk_pass":[["impl Message for AuthenticationChallengeRequest"],["impl Message for AuthenticationChallengeResponse"],["impl Message for AuthenticationAnswerRequest"],["impl Message for AuthenticationAnswerResponse"],["impl Message for AuthenticationAnswerResponse"],["impl Message for AuthenticationChallengeResponse"],["impl Message for RegisterRequest"],["impl Message for RegisterResponse"],["impl Message for RegisterRequest"],["impl Message for AuthenticationChallengeRequest"],["impl Message for RegisterResponse"],["impl Message for AuthenticationAnswerRequest"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/strum/trait.VariantNames.js b/implementors/strum/trait.VariantNames.js
index da26c8e..df74e6c 100644
--- a/implementors/strum/trait.VariantNames.js
+++ b/implementors/strum/trait.VariantNames.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl VariantNames for EllipticCurveType"],["impl VariantNames for ChaumPedersenType"],["impl VariantNames for RfcModpType"]]
+"zk_pass":[["impl VariantNames for RfcModpType"],["impl VariantNames for ChaumPedersenType"],["impl VariantNames for EllipticCurveType"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/tower_service/trait.Service.js b/implementors/tower_service/trait.Service.js
index 326fd09..388e92e 100644
--- a/implementors/tower_service/trait.Service.js
+++ b/implementors/tower_service/trait.Service.js
@@ -1,3 +1,3 @@
(function() {var implementors = {
-"zk_pass":[["impl<T, B> Service<Request<B>> for AuthServer<T>where\n T: Auth,\n B: Body + Send + 'static,\n B::Error: Into<StdError> + Send + 'static,"],["impl<T, B> Service<Request<B>> for AuthServer<T>where\n T: Auth,\n B: Body + Send + 'static,\n B::Error: Into<StdError> + Send + 'static,"]]
+"zk_pass":[["impl<T, B> Service<Request<B>> for AuthServer<T>where\n T: Auth,\n B: Body + Send + 'static,\n B::Error: Into<StdError> + Send + 'static,"],["impl<T, B> Service<Request<B>> for AuthServer<T>where\n T: Auth,\n B: Body + Send + 'static,\n B::Error: Into<StdError> + Send + 'static,"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/search-index.js b/search-index.js
index 5f1b781..3fd797c 100644
--- a/search-index.js
+++ b/search-index.js
@@ -1,7 +1,7 @@
var searchIndex = JSON.parse('{\
"client":{"doc":"","t":"DLLLMFLLLFMLLFMMMLLMLML","n":["Opt","borrow","borrow_mut","clap","curve","execute_selected_protocol","fmt","from","from_clap","hash_or_randomize_secret","host","into","into_request","main","modp","port","secret","try_from","try_into","type","type_id","user","vzip"],"q":[[0,"client"]],"d":["Command-line options structure for the ZKPass client.","","","","Elliptic curve type for the Elliptic Curve implementation …","","","Returns the argument unchanged.","","Hashes the provided secret string or generates a random …","The host address of the ZKPass server.","Calls U::from(self).","","Main entry point for the ZKPass client.","Type of RFC log group to use for the Discrete Log …","The port number to connect to the ZKPass server.","Optional secret passcode for authentication.","","","Underlying type of the Chaum-Pedersen protocol to use.","","Username for identification.",""],"i":[0,2,2,2,2,0,2,2,2,0,2,2,2,0,2,2,2,2,2,2,2,2,2],"f":[0,[[]],[[]],[[],1],0,[[2,3],[[6,[[5,[4]]]]]],[[2,7],8],[[]],[9,2],[[[11,[10]]],[[0,[[12,[[0,[[12,[[0,[[12,[[0,[[12,[[0,[12,13]]]],[13,[[0,[12,13]]]]]]]],[13,[[0,[[12,[[0,[12,13]]]],[13,[[0,[12,13]]]]]]]]]]]],[13,[[0,[[12,[[0,[[12,[[0,[12,13]]]],[13,[[0,[12,13]]]]]]]],[13,[[0,[[12,[[0,[12,13]]]],[13,[[0,[12,13]]]]]]]]]]]]]]]],[13,[[0,[[12,[[0,[[12,[[0,[[12,[[0,[12,13]]]],[13,[[0,[12,13]]]]]]]],[13,[[0,[[12,[[0,[12,13]]]],[13,[[0,[12,13]]]]]]]]]]]],[13,[[0,[[12,[[0,[[12,[[0,[12,13]]]],[13,[[0,[12,13]]]]]]]],[13,[[0,[[12,[[0,[12,13]]]],[13,[[0,[12,13]]]]]]]]]]]]]]]]]]]],0,[[]],[[],14],[[],[[6,[[5,[4]]]]]],0,0,0,[[],6],[[],6],0,[[],15],0,[[]]],"c":[],"p":[[3,"App"],[3,"Opt"],[3,"AuthClientLib"],[8,"Error"],[3,"Box"],[4,"Result"],[3,"Formatter"],[6,"Result"],[3,"ArgMatches"],[3,"String"],[4,"Option"],[8,"ByteConvertible"],[8,"RandomGenerator"],[3,"Request"],[3,"TypeId"]]},\
"server":{"doc":"","t":"DLLLMLLLMLLFMMLLMLL","n":["Opt","borrow","borrow_mut","clap","curve","fmt","from","from_clap","host","into","into_request","main","modp","port","try_from","try_into","type","type_id","vzip"],"q":[[0,"server"]],"d":["Struct representing command line options for the server.","","","","Command line option to set the elliptic curve type. …","","Returns the argument unchanged.","","Command line option to set the host address for the server.","Calls U::from(self).","","Main entry point for the ZKPass Chaum-Pedersen protocol …","Command line option to set the type of the RFC log group …","Command line option to set the port for the server. …","","","Command line option to set the underlying type of the …","",""],"i":[0,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2],"f":[0,[[]],[[]],[[],1],0,[[2,3],4],[[]],[5,2],0,[[]],[[],6],[[],[[9,[[8,[7]]]]]],0,0,[[],9],[[],9],0,[[],10],[[]]],"c":[],"p":[[3,"App"],[3,"Opt"],[3,"Formatter"],[6,"Result"],[3,"ArgMatches"],[3,"Request"],[8,"Error"],[3,"Box"],[4,"Result"],[3,"TypeId"]]},\
-"zk_pass":{"doc":"Chaum-Pedersen Zero-Knowledge Interactive Proof …","t":"AAAAAAQIQQQDQQLLKKLLKAAALLLLLLLMMLLMAMALLLLKALDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDLLLLLLLLLLLLLDLLLLLLLLLLLLLLLLLDLLLLLLLLLLLLLFDLLLLLLLLLLLLLDLLLLFLLLLLLLLLADDDDDDAMMALLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLMMDLLLLLLLLLLLLLLLLLLLLLLLLLIDLLLLLLLKLLLLLLLLLLLLKLLLLLKLLENNNENNNNENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLIKKIKDLLLLLLLLLLLLLADDDDDDAMMALLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLMMDLLLLLLLLLLLLLLLLLLLLLLLLLIDLLLLLLLKLLLLLLLLLLLLKLLLLLKLL","n":["chaum_pedersen","client","cmdutil","conversion","rand","service","Challenge","ChaumPedersen","CommitParameters","CommitmentRandom","GroupParameters","GroupParams","Response","Secret","borrow","borrow_mut","challenge","challenge_response","clone","clone_into","commitment","constants","curve25519","discretelog","fmt","from","from_ref","from_str","from_str","from_str","from_str","g","h","into","into_request","p","pallas","q","test","to_owned","try_from","try_into","type_id","verify","vesta","vzip","EC25519_GROUP_PARAMS","PALLAS_GROUP_PARAMS","RFC5114_MODP_1024_160_BIT_PARAMS","RFC5114_MODP_2048_224_BIT_PARAMS","RFC5114_MODP_2048_256_BIT_PARAMS","VESTA_GROUP_PARAMS","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deref","deref","deref","deref","deref","deref","from","from","from","from","from","from","into","into","into","into","into","into","into_request","into_request","into_request","into_request","into_request","into_request","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","Curve25519ChaumPedersen","borrow","borrow_mut","challenge","challenge_response","commitment","from","into","into_request","try_from","try_into","type_id","verify","vzip","DiscreteLogChaumPedersen","borrow","borrow_mut","challenge","challenge_response","clone","clone_into","commitment","from","from_ref","into","into_request","to_owned","try_from","try_into","type_id","verify","vzip","PallasCurveChaumPedersen","borrow","borrow_mut","challenge","challenge_response","commitment","from","into","into_request","try_from","try_into","type_id","verify","vzip","test_execute_protocol","VestaCurveChaumPedersen","borrow","borrow_mut","challenge","challenge_response","commitment","from","into","into_request","try_from","try_into","type_id","verify","vzip","AuthClientLib","borrow","borrow_mut","connect","create_authentication_challenge","execute_protocol","from","into","into_request","register","try_from","try_into","type_id","verify_authentication","vzip","zkp_auth","AuthenticationAnswerRequest","AuthenticationAnswerResponse","AuthenticationChallengeRequest","AuthenticationChallengeResponse","RegisterRequest","RegisterResponse","auth_client","auth_id","auth_id","auth_server","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","c","clear","clear","clear","clear","clear","clear","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","default","default","default","default","default","encoded_len","encoded_len","encoded_len","encoded_len","encoded_len","encoded_len","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","into","into","into","into","into","into","into_request","into_request","into_request","into_request","into_request","into_request","r1","r2","s","session_id","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","user","user","vzip","vzip","vzip","vzip","vzip","vzip","y1","y2","AuthClient","accept_compressed","borrow","borrow_mut","clone","clone_into","connect","create_authentication_challenge","fmt","from","from_ref","into","into_request","max_decoding_message_size","max_encoding_message_size","new","register","send_compressed","to_owned","try_from","try_into","type_id","verify_authentication","vzip","with_interceptor","with_origin","Auth","AuthServer","accept_compressed","borrow","borrow_mut","call","call","clone","clone_into","create_authentication_challenge","fmt","from","from_arc","from_ref","into","into_make_service","into_request","max_decoding_message_size","max_encoding_message_size","new","poll_ready","poll_ready","register","send_compressed","to_owned","try_from","try_into","type_id","verify_authentication","vzip","with_interceptor","ChaumPedersenType","DiscreteLog","Ec25519","EllipticCurve","EllipticCurveType","Pallas","Rfc5114Modp_1024_160","Rfc5114Modp_2048_224","Rfc5114Modp_2048_256","RfcModpType","Vesta","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from_str","from_str","from_str","into","into","into","into_request","into_request","into_request","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","ByteConvertible","convert_from","convert_to","RandomGenerator","generate_random","ZkAuth","borrow","borrow_mut","create_authentication_challenge","from","into","into_request","new","register","try_from","try_into","type_id","verify_authentication","vzip","zkp_auth","AuthenticationAnswerRequest","AuthenticationAnswerResponse","AuthenticationChallengeRequest","AuthenticationChallengeResponse","RegisterRequest","RegisterResponse","auth_client","auth_id","auth_id","auth_server","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","c","clear","clear","clear","clear","clear","clear","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","default","default","default","default","default","encoded_len","encoded_len","encoded_len","encoded_len","encoded_len","encoded_len","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","into","into","into","into","into","into","into_request","into_request","into_request","into_request","into_request","into_request","r1","r2","s","session_id","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","user","user","vzip","vzip","vzip","vzip","vzip","vzip","y1","y2","AuthClient","accept_compressed","borrow","borrow_mut","clone","clone_into","connect","create_authentication_challenge","fmt","from","from_ref","into","into_request","max_decoding_message_size","max_encoding_message_size","new","register","send_compressed","to_owned","try_from","try_into","type_id","verify_authentication","vzip","with_interceptor","with_origin","Auth","AuthServer","accept_compressed","borrow","borrow_mut","call","call","clone","clone_into","create_authentication_challenge","fmt","from","from_arc","from_ref","into","into_make_service","into_request","max_decoding_message_size","max_encoding_message_size","new","poll_ready","poll_ready","register","send_compressed","to_owned","try_from","try_into","type_id","verify_authentication","vzip","with_interceptor"],"q":[[0,"zk_pass"],[6,"zk_pass::chaum_pedersen"],[46,"zk_pass::chaum_pedersen::constants"],[112,"zk_pass::chaum_pedersen::curve25519"],[126,"zk_pass::chaum_pedersen::discretelog"],[144,"zk_pass::chaum_pedersen::pallas"],[158,"zk_pass::chaum_pedersen::test"],[159,"zk_pass::chaum_pedersen::vesta"],[173,"zk_pass::client"],[189,"zk_pass::client::zkp_auth"],[316,"zk_pass::client::zkp_auth::auth_client"],[342,"zk_pass::client::zkp_auth::auth_server"],[373,"zk_pass::cmdutil"],[429,"zk_pass::conversion"],[432,"zk_pass::rand"],[434,"zk_pass::service"],[449,"zk_pass::service::zkp_auth"],[576,"zk_pass::service::zkp_auth::auth_client"],[602,"zk_pass::service::zkp_auth::auth_server"]],"d":["Implements the Chaum-Pedersen zero-knowledge proof …","Handles client-side operations and interactions.","Utilities for command line argument parsing and handling.","Functions for type conversions and data formatting.","Cryptographically secure random number generation …","Core services and business logic implementation.","The type representing the challenge in the protocol.","A trait defining the interface for the Chaum-Pedersen …","The type representing the commitment parameters in the …","The type representing the commitment randomness in the …","The type representing the group parameters used in the …","A struct representing group parameters in cryptographic …","The type representing the response in the protocol.","The type representing the secret to be proven.","","","Generates a challenge in the Chaum-Pedersen protocol.","Calculates the challenge response in the Chaum-Pedersen …","","","Calculates the commitment in the Chaum-Pedersen protocol.","This module defines various constants used throughout the …","This module provides functionality related to the …","This module focuses on the discrete logarithm problem and …","","Returns the argument unchanged.","","","","","","The generator g of the group.","An additional generator h of the group, ensuring it’s …","Calls U::from(self).","","The prime modulus p defining the size of the group.","This module provides functionality related to the Pallas …","The order q of the subgroup generated by g and h.","A module dedicated to testing various components of the …","","","","","Verifies the response in the Chaum-Pedersen protocol.","This module provides functionality related to the Vesta …","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A struct representing the Chaum-Pedersen protocol …","","","Generate a random challenge for the Chaum-Pedersen …","Calculate the response for the Chaum-Pedersen protocol.","Calculate the commitment values for the Chaum-Pedersen …","Returns the argument unchanged.","Calls U::from(self).","","","","","Verify the response for the Chaum-Pedersen protocol.","","A struct representing the Chaum-Pedersen protocol …","","","Generates a random challenge for the protocol within the …","Generates a random challenge for the protocol within the …","","","Calculates the commitment for the given secret x using the …","Returns the argument unchanged.","","Calls U::from(self).","","","","","","Verifies the response against the given commitment, …","","The PallasCurveChaumPedersen struct defines the specific …","","","Generates a random challenge scalar.","Generates a response to a challenge given a secret and a …","Generates a commitment to a secret on the Pallas curve.","Returns the argument unchanged.","Calls U::from(self).","","","","","Verifies the correctness of the response to a challenge.","","Executes the Chaum-Pedersen protocol using a generic …","The VestaCurveChaumPedersen struct defines the specific …","","","Generates a random challenge scalar.","Generates a response to a challenge given a secret and a …","Generates a commitment to a secret on the Vesta curve.","Returns the argument unchanged.","Calls U::from(self).","","","","","Verifies the correctness of the response to a challenge.","","A client library for interacting with the ZKP …","","","Connects to the ZKP authentication service.","Creates an authentication challenge for a user.","Executes the Chaum-Pedersen protocol for client …","Returns the argument unchanged.","Calls U::from(self).","","Registers a new user with the ZKP authentication service.","","","","Verifies an authentication challenge for a user.","","A module that contains the auto-generated gRPC code for …","","","","","","","Generated client implementations.","","","Generated server implementations.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enable decompressing responses.","","","","","Attempt to create a new client by connecting to a given …","","","Returns the argument unchanged.","","Calls U::from(self).","","Limits the maximum size of a decoded message.","Limits the maximum size of an encoded message.","","","Compress requests with the given encoding.","","","","","","","","","Generated trait containing gRPC methods that should be …","","Enable decompressing requests with the given encoding.","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","Limits the maximum size of a decoded message.","Limits the maximum size of an encoded message.","","","","","Compress responses with the given encoding, if the client …","","","","","","","","An enumeration representing the types of Chaum-Pedersen …","","","","An enumeration representing the types of elliptic curves.","","","","","An enumeration representing the types of RFC MODP groups.","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","A trait for converting types to and from byte …","Constructs an object from a byte array.","Converts the provided object to a byte array.","Defines a trait for generating random values of a given …","Generates a random value of type T.","A struct representing the zero-knowledge authentication …","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","Generated client implementations.","","","Generated server implementations.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enable decompressing responses.","","","","","Attempt to create a new client by connecting to a given …","","","Returns the argument unchanged.","","Calls U::from(self).","","Limits the maximum size of a decoded message.","Limits the maximum size of an encoded message.","","","Compress requests with the given encoding.","","","","","","","","","Generated trait containing gRPC methods that should be …","","Enable decompressing requests with the given encoding.","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","Limits the maximum size of a decoded message.","Limits the maximum size of an encoded message.","","","","","Compress responses with the given encoding, if the client …","","","","","","",""],"i":[0,0,0,0,0,0,68,0,68,68,68,0,68,68,2,2,68,68,2,2,68,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,2,68,0,2,0,0,0,0,0,0,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,0,80,80,80,80,80,80,80,80,80,80,80,80,80,0,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,0,81,81,81,81,81,81,81,81,81,81,81,81,81,0,0,82,82,82,82,82,82,82,82,82,82,82,82,82,0,24,24,24,24,0,24,24,24,24,24,24,24,24,24,0,0,0,0,0,0,0,0,37,38,0,34,35,36,37,38,39,34,35,36,37,38,39,37,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,36,36,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,36,34,35,36,37,38,39,34,34,0,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,0,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,53,54,54,0,64,65,64,0,65,63,63,63,0,65,63,64,65,63,64,65,63,64,65,63,63,64,64,65,65,63,64,65,63,64,65,63,64,65,63,64,65,63,64,65,63,63,64,64,65,65,63,64,65,63,64,65,63,64,65,0,30,30,0,31,0,70,70,70,70,70,70,70,70,70,70,70,70,70,0,0,0,0,0,0,0,0,75,73,0,72,74,71,75,73,76,72,74,71,75,73,76,75,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,71,71,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,71,72,74,71,75,73,76,72,72,0,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,0,0,79,79,79,79,79,79,79,78,79,79,79,79,79,79,79,79,79,79,79,79,78,79,79,79,79,79,78,79,79],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[[2,[1]]],[[2,[1]]]],[[]],[[]],0,0,0,[[[2,[3]],4],5],[[]],[[]],[6,[[8,[[2,[7]]]]]],[6,[[8,[[2,[9]]]]]],[6,[[8,[[2,[10]]]]]],[6,[[8,[[2,[11]]]]]],0,0,[[]],[[],12],0,0,0,0,[[]],[[],8],[[],8],[[],13],[[],14],0,[[]],0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[15,[[2,[7]]]],[16,[[2,[7]]]],[17,[[2,[7]]]],[18,[[2,[10]]]],[19,[[2,[11]]]],[20,[[2,[9]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],13],[[],13],[[],13],[[],13],[[],13],[[],13],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[[2,[10]]]],[[]],[[]],[[]],[[]],[[],12],[[],8],[[],8],[[],13],[[],14],[[]],0,[[]],[[]],[[[2,[7]]],7],[[]],[21,21],[[]],[[]],[[]],[[]],[[]],[[],12],[[]],[[],8],[[],8],[[],13],[[],14],[[]],0,[[]],[[]],[[[2,[11]]]],[[]],[[]],[[]],[[]],[[],12],[[],8],[[],8],[[],13],[[],14],[[]],[[],14],0,[[]],[[]],[[[2,[9]]]],[[]],[[]],[[]],[[]],[[],12],[[],8],[[],8],[[],13],[[],14],[[]],0,[[]],[[]],[[[23,[22]]],[[8,[24,25]]]],[[24,26,[28,[27]],[28,[27]]],[[8,[29]]]],[[[2,[[0,[[30,[[0,[[30,[[0,[[30,[[0,[30,31]]]],[31,[[0,[30,31]]]]]]]],[31,[[0,[[30,[[0,[30,31]]]],[31,[[0,[30,31]]]]]]]]]]]],[31,[[0,[[30,[[0,[[30,[[0,[30,31]]]],[31,[[0,[30,31]]]]]]]],[31,[[0,[[30,[[0,[30,31]]]],[31,[[0,[30,31]]]]]]]]]]]]]]]],26,24],[[8,[[33,[32]]]]]],[[]],[[]],[[],12],[[24,26,[28,[27]],[28,[27]]],[[8,[29]]]],[[],8],[[],8],[[],13],[[24,26,[28,[27]]],[[8,[26,29]]]],[[]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[34],[35],[36],[37],[38],[39],[34,34],[35,35],[36,36],[37,37],[38,38],[39,39],[[]],[[]],[[]],[[]],[[]],[[]],[[],34],[[],35],[[],36],[[],37],[[],38],[[],39],[34,40],[35,40],[36,40],[37,40],[38,40],[39,40],[[34,34],14],[[35,35],14],[[36,36],14],[[37,37],14],[[38,38],14],[[39,39],14],[[34,4],5],[[35,4],5],[[36,4],5],[[37,4],5],[[38,4],5],[[39,4],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],13],[[],13],[[],13],[[],13],[[],13],[[],13],0,0,[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[[43,[[42,[41]]]],44],[[43,[[42,[41]]]]]],[[]],[[]],[[[43,[1]]],[[43,[1]]]],[[]],[[[23,[22]]],[[8,[[43,[45]],25]]]],[[[43,[[42,[41]]]],[46,[36]]],[[8,[[47,[37]],29]]]],[[[43,[3]],4],5],[[]],[[]],[[]],[[],12],[[[43,[[42,[41]]]],40],[[43,[[42,[41]]]]]],[[[43,[[42,[41]]]],40],[[43,[[42,[41]]]]]],[[[42,[41]]],[[43,[[42,[41]]]]]],[[[43,[[42,[41]]]],[46,[34]]],[[8,[[47,[35]],29]]]],[[[43,[[42,[41]]]],44],[[43,[[42,[41]]]]]],[[]],[[],8],[[],8],[[],13],[[[43,[[42,[41]]]],[46,[38]]],[[8,[[47,[39]],29]]]],[[]],[[[49,[[48,[41]]]],[42,[41]],50],[[43,[[51,[[49,[[48,[41]]]],[42,[41]],50]]]]]],[[[42,[41]],52],[[43,[[42,[41]]]]]],0,0,[[[54,[53]],44],[[54,[53]]]],[[]],[[]],[[[54,[53]],[48,[[0,[55,56]]]]]],[48],[[[54,[53]]],[[54,[53]]]],[[]],[[[12,[36]]],[[58,[[33,[57]]]]]],[[[54,[[0,[3,53]]]],4],5],[[]],[[[59,[53]]],[[54,[53]]]],[[]],[[]],[[],60],[[],12],[[[54,[53]],40],[[54,[53]]]],[[[54,[53]],40],[[54,[53]]]],[53,[[54,[53]]]],[61,[[62,[8]]]],[[[54,[53]],61],[[62,[8]]]],[[[12,[34]]],[[58,[[33,[57]]]]]],[[[54,[53]],44],[[54,[53]]]],[[]],[[],8],[[],8],[[],13],[[[12,[38]]],[[58,[[33,[57]]]]]],[[]],[[53,50],[[51,[[54,[53]],50]]]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[63,63],14],[[64,64],14],[[65,65],14],[[63,4],5],[[63,4],[[8,[66]]]],[[64,4],5],[[64,4],[[8,[66]]]],[[65,4],[[8,[66]]]],[[65,4],5],[[]],[[]],[[]],[6,[[8,[63]]]],[6,[[8,[64]]]],[6,[[8,[65]]]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],26],[[],26],[[],26],[6,[[8,[63]]]],[[],8],[6,[[8,[64]]]],[[],8],[6,[[8,[65]]]],[[],8],[[],8],[[],8],[[],8],[[],13],[[],13],[[],13],[[]],[[]],[[]],0,[[[67,[27]]],[[8,[[33,[32]]]]]],[[],[[28,[27]]]],0,[[],[[8,[[33,[32]]]]]],0,[[]],[[]],[[[70,[[0,[68,69,56]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]],[12,[71]]],[[58,[[33,[57]]]]]],[[]],[[]],[[],12],[[[2,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]]],[[70,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]]]],[[[70,[[0,[68,69,56]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]],[12,[72]]],[[58,[[33,[57]]]]]],[[],8],[[],8],[[],13],[[[70,[[0,[68,69,56]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]],[12,[73]]],[[58,[[33,[57]]]]]],[[]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[72],[74],[71],[75],[73],[76],[72,72],[74,74],[71,71],[75,75],[73,73],[76,76],[[]],[[]],[[]],[[]],[[]],[[]],[[],72],[[],74],[[],71],[[],75],[[],73],[[],76],[72,40],[74,40],[71,40],[75,40],[73,40],[76,40],[[72,72],14],[[74,74],14],[[71,71],14],[[75,75],14],[[73,73],14],[[76,76],14],[[72,4],5],[[74,4],5],[[71,4],5],[[75,4],5],[[73,4],5],[[76,4],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],13],[[],13],[[],13],[[],13],[[],13],[[],13],0,0,[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[[77,[[42,[41]]]],44],[[77,[[42,[41]]]]]],[[]],[[]],[[[77,[1]]],[[77,[1]]]],[[]],[[[23,[22]]],[[8,[[77,[45]],25]]]],[[[77,[[42,[41]]]],[46,[71]]],[[8,[[47,[75]],29]]]],[[[77,[3]],4],5],[[]],[[]],[[]],[[],12],[[[77,[[42,[41]]]],40],[[77,[[42,[41]]]]]],[[[77,[[42,[41]]]],40],[[77,[[42,[41]]]]]],[[[42,[41]]],[[77,[[42,[41]]]]]],[[[77,[[42,[41]]]],[46,[72]]],[[8,[[47,[74]],29]]]],[[[77,[[42,[41]]]],44],[[77,[[42,[41]]]]]],[[]],[[],8],[[],8],[[],13],[[[77,[[42,[41]]]],[46,[73]]],[[8,[[47,[76]],29]]]],[[]],[[[49,[[48,[41]]]],[42,[41]],50],[[77,[[51,[[49,[[48,[41]]]],[42,[41]],50]]]]]],[[[42,[41]],52],[[77,[[42,[41]]]]]],0,0,[[[79,[78]],44],[[79,[78]]]],[[]],[[]],[48],[[[79,[78]],[48,[[0,[55,56]]]]]],[[[79,[78]]],[[79,[78]]]],[[]],[[[12,[71]]],[[58,[[33,[57]]]]]],[[[79,[[0,[3,78]]]],4],5],[[]],[[[59,[78]]],[[79,[78]]]],[[]],[[]],[[],60],[[],12],[[[79,[78]],40],[[79,[78]]]],[[[79,[78]],40],[[79,[78]]]],[78,[[79,[78]]]],[[[79,[78]],61],[[62,[8]]]],[61,[[62,[8]]]],[[[12,[72]]],[[58,[[33,[57]]]]]],[[[79,[78]],44],[[79,[78]]]],[[]],[[],8],[[],8],[[],13],[[[12,[73]]],[[58,[[33,[57]]]]]],[[]],[[78,50],[[51,[[79,[78]],50]]]]],"c":[],"p":[[8,"Clone"],[3,"GroupParams"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[15,"str"],[3,"BigUint"],[4,"Result"],[6,"Point"],[3,"RistrettoPoint"],[6,"Point"],[3,"Request"],[3,"TypeId"],[15,"bool"],[3,"RFC5114_MODP_1024_160_BIT_PARAMS"],[3,"RFC5114_MODP_2048_224_BIT_PARAMS"],[3,"RFC5114_MODP_2048_256_BIT_PARAMS"],[3,"EC25519_GROUP_PARAMS"],[3,"PALLAS_GROUP_PARAMS"],[3,"VESTA_GROUP_PARAMS"],[3,"DiscreteLogChaumPedersen"],[3,"Endpoint"],[8,"TryInto"],[3,"AuthClientLib"],[3,"Error"],[3,"String"],[15,"u8"],[3,"Vec"],[3,"Status"],[8,"ByteConvertible"],[8,"RandomGenerator"],[8,"Error"],[3,"Box"],[3,"RegisterRequest"],[3,"RegisterResponse"],[3,"AuthenticationChallengeRequest"],[3,"AuthenticationChallengeResponse"],[3,"AuthenticationAnswerRequest"],[3,"AuthenticationAnswerResponse"],[15,"usize"],[6,"BoxBody"],[8,"GrpcService"],[3,"AuthClient"],[4,"CompressionEncoding"],[3,"Channel"],[8,"IntoRequest"],[3,"Response"],[3,"Request"],[8,"Service"],[8,"Interceptor"],[3,"InterceptedService"],[3,"Uri"],[8,"Auth"],[3,"AuthServer"],[8,"Body"],[8,"Send"],[8,"Future"],[3,"Pin"],[3,"Arc"],[3,"IntoMakeService"],[3,"Context"],[4,"Poll"],[4,"RfcModpType"],[4,"ChaumPedersenType"],[4,"EllipticCurveType"],[3,"Error"],[15,"slice"],[8,"ChaumPedersen"],[8,"Sync"],[3,"ZkAuth"],[3,"AuthenticationChallengeRequest"],[3,"RegisterRequest"],[3,"AuthenticationAnswerRequest"],[3,"RegisterResponse"],[3,"AuthenticationChallengeResponse"],[3,"AuthenticationAnswerResponse"],[3,"AuthClient"],[8,"Auth"],[3,"AuthServer"],[3,"Curve25519ChaumPedersen"],[3,"PallasCurveChaumPedersen"],[3,"VestaCurveChaumPedersen"]]}\
+"zk_pass":{"doc":"Chaum-Pedersen Zero-Knowledge Interactive Proof …","t":"AAAAAAQIQQQDQQLLKKLLKAAALLLLLLLMMLLMAMALLLLKALDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDLLLLLLLLLLLLLDLLLLLLLLLLLLLLLLLDLLLLLLLLLLLLLFDLLLLLLLLLLLLLDLLLLFLLLLLLLLLADDDDDDAMMALLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLMMDLLLLLLLLLLLLLLLLLLLLLLLLLIDLLLLLLLKLLLLLLLLLLLLKLLLLLKLLENNNENNNNENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLIKKIKDLLLLLLLLLLLLLADDDDDDAMMALLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLMMDLLLLLLLLLLLLLLLLLLLLLLLLLIDLLLLLLLKLLLLLLLLLLLLKLLLLLKLL","n":["chaum_pedersen","client","cmdutil","conversion","rand","service","Challenge","ChaumPedersen","CommitParameters","CommitmentRandom","GroupParameters","GroupParams","Response","Secret","borrow","borrow_mut","challenge","challenge_response","clone","clone_into","commitment","constants","curve25519","discretelog","fmt","from","from_ref","from_str","from_str","from_str","from_str","g","h","into","into_request","p","pallas","q","test","to_owned","try_from","try_into","type_id","verify","vesta","vzip","EC25519_GROUP_PARAMS","PALLAS_GROUP_PARAMS","RFC5114_MODP_1024_160_BIT_PARAMS","RFC5114_MODP_2048_224_BIT_PARAMS","RFC5114_MODP_2048_256_BIT_PARAMS","VESTA_GROUP_PARAMS","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deref","deref","deref","deref","deref","deref","from","from","from","from","from","from","into","into","into","into","into","into","into_request","into_request","into_request","into_request","into_request","into_request","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","Curve25519ChaumPedersen","borrow","borrow_mut","challenge","challenge_response","commitment","from","into","into_request","try_from","try_into","type_id","verify","vzip","DiscreteLogChaumPedersen","borrow","borrow_mut","challenge","challenge_response","clone","clone_into","commitment","from","from_ref","into","into_request","to_owned","try_from","try_into","type_id","verify","vzip","PallasCurveChaumPedersen","borrow","borrow_mut","challenge","challenge_response","commitment","from","into","into_request","try_from","try_into","type_id","verify","vzip","test_execute_protocol","VestaCurveChaumPedersen","borrow","borrow_mut","challenge","challenge_response","commitment","from","into","into_request","try_from","try_into","type_id","verify","vzip","AuthClientLib","borrow","borrow_mut","connect","create_authentication_challenge","execute_protocol","from","into","into_request","register","try_from","try_into","type_id","verify_authentication","vzip","zkp_auth","AuthenticationAnswerRequest","AuthenticationAnswerResponse","AuthenticationChallengeRequest","AuthenticationChallengeResponse","RegisterRequest","RegisterResponse","auth_client","auth_id","auth_id","auth_server","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","c","clear","clear","clear","clear","clear","clear","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","default","default","default","default","default","encoded_len","encoded_len","encoded_len","encoded_len","encoded_len","encoded_len","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","into","into","into","into","into","into","into_request","into_request","into_request","into_request","into_request","into_request","r1","r2","s","session_id","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","user","user","vzip","vzip","vzip","vzip","vzip","vzip","y1","y2","AuthClient","accept_compressed","borrow","borrow_mut","clone","clone_into","connect","create_authentication_challenge","fmt","from","from_ref","into","into_request","max_decoding_message_size","max_encoding_message_size","new","register","send_compressed","to_owned","try_from","try_into","type_id","verify_authentication","vzip","with_interceptor","with_origin","Auth","AuthServer","accept_compressed","borrow","borrow_mut","call","call","clone","clone_into","create_authentication_challenge","fmt","from","from_arc","from_ref","into","into_make_service","into_request","max_decoding_message_size","max_encoding_message_size","new","poll_ready","poll_ready","register","send_compressed","to_owned","try_from","try_into","type_id","verify_authentication","vzip","with_interceptor","ChaumPedersenType","DiscreteLog","Ec25519","EllipticCurve","EllipticCurveType","Pallas","Rfc5114Modp_1024_160","Rfc5114Modp_2048_224","Rfc5114Modp_2048_256","RfcModpType","Vesta","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from_str","from_str","from_str","into","into","into","into_request","into_request","into_request","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","ByteConvertible","convert_from","convert_to","RandomGenerator","generate_random","ZkAuth","borrow","borrow_mut","create_authentication_challenge","from","into","into_request","new","register","try_from","try_into","type_id","verify_authentication","vzip","zkp_auth","AuthenticationAnswerRequest","AuthenticationAnswerResponse","AuthenticationChallengeRequest","AuthenticationChallengeResponse","RegisterRequest","RegisterResponse","auth_client","auth_id","auth_id","auth_server","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","c","clear","clear","clear","clear","clear","clear","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","default","default","default","default","default","encoded_len","encoded_len","encoded_len","encoded_len","encoded_len","encoded_len","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","into","into","into","into","into","into","into_request","into_request","into_request","into_request","into_request","into_request","r1","r2","s","session_id","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","user","user","vzip","vzip","vzip","vzip","vzip","vzip","y1","y2","AuthClient","accept_compressed","borrow","borrow_mut","clone","clone_into","connect","create_authentication_challenge","fmt","from","from_ref","into","into_request","max_decoding_message_size","max_encoding_message_size","new","register","send_compressed","to_owned","try_from","try_into","type_id","verify_authentication","vzip","with_interceptor","with_origin","Auth","AuthServer","accept_compressed","borrow","borrow_mut","call","call","clone","clone_into","create_authentication_challenge","fmt","from","from_arc","from_ref","into","into_make_service","into_request","max_decoding_message_size","max_encoding_message_size","new","poll_ready","poll_ready","register","send_compressed","to_owned","try_from","try_into","type_id","verify_authentication","vzip","with_interceptor"],"q":[[0,"zk_pass"],[6,"zk_pass::chaum_pedersen"],[46,"zk_pass::chaum_pedersen::constants"],[112,"zk_pass::chaum_pedersen::curve25519"],[126,"zk_pass::chaum_pedersen::discretelog"],[144,"zk_pass::chaum_pedersen::pallas"],[158,"zk_pass::chaum_pedersen::test"],[159,"zk_pass::chaum_pedersen::vesta"],[173,"zk_pass::client"],[189,"zk_pass::client::zkp_auth"],[316,"zk_pass::client::zkp_auth::auth_client"],[342,"zk_pass::client::zkp_auth::auth_server"],[373,"zk_pass::cmdutil"],[429,"zk_pass::conversion"],[432,"zk_pass::rand"],[434,"zk_pass::service"],[449,"zk_pass::service::zkp_auth"],[576,"zk_pass::service::zkp_auth::auth_client"],[602,"zk_pass::service::zkp_auth::auth_server"]],"d":["Implements the Chaum-Pedersen zero-knowledge proof …","Handles client-side operations and interactions.","Utilities for command line argument parsing and handling.","Functions for type conversions and data formatting.","Cryptographically secure random number generation …","Core services and business logic implementation.","The type representing the challenge in the protocol.","A trait defining the interface for the Chaum-Pedersen …","The type representing the commitment parameters in the …","The type representing the commitment randomness in the …","The type representing the group parameters used in the …","A struct representing group parameters in cryptographic …","The type representing the response in the protocol.","The type representing the secret to be proven.","","","Generates a challenge in the Chaum-Pedersen protocol.","Calculates the challenge response in the Chaum-Pedersen …","","","Calculates the commitment in the Chaum-Pedersen protocol.","This module defines various constants used throughout the …","This module provides functionality related to the …","This module focuses on the discrete logarithm problem and …","","Returns the argument unchanged.","","","","","","The generator g of the group.","An additional generator h of the group, ensuring it’s …","Calls U::from(self).","","The prime modulus p defining the size of the group.","This module provides functionality related to the Pallas …","The order q of the subgroup generated by g and h.","A module dedicated to testing various components of the …","","","","","Verifies the response in the Chaum-Pedersen protocol.","This module provides functionality related to the Vesta …","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A struct representing the Chaum-Pedersen protocol …","","","Generate a random challenge for the Chaum-Pedersen …","Calculate the response for the Chaum-Pedersen protocol.","Calculate the commitment values for the Chaum-Pedersen …","Returns the argument unchanged.","Calls U::from(self).","","","","","Verify the response for the Chaum-Pedersen protocol.","","A struct representing the Chaum-Pedersen protocol …","","","Generates a random challenge for the protocol within the …","Generates a random challenge for the protocol within the …","","","Calculates the commitment for the given secret x using the …","Returns the argument unchanged.","","Calls U::from(self).","","","","","","Verifies the response against the given commitment, …","","The PallasCurveChaumPedersen struct defines the specific …","","","Generates a random challenge scalar.","Generates a response to a challenge given a secret and a …","Generates a commitment to a secret on the Pallas curve.","Returns the argument unchanged.","Calls U::from(self).","","","","","Verifies the correctness of the response to a challenge.","","Executes the Chaum-Pedersen protocol using a generic …","The VestaCurveChaumPedersen struct defines the specific …","","","Generates a random challenge scalar.","Generates a response to a challenge given a secret and a …","Generates a commitment to a secret on the Vesta curve.","Returns the argument unchanged.","Calls U::from(self).","","","","","Verifies the correctness of the response to a challenge.","","A client library for interacting with the ZKP …","","","Connects to the ZKP authentication service.","Creates an authentication challenge for a user.","Executes the Chaum-Pedersen protocol for client …","Returns the argument unchanged.","Calls U::from(self).","","Registers a new user with the ZKP authentication service.","","","","Verifies an authentication challenge for a user.","","A module that contains the auto-generated gRPC code for …","","","","","","","Generated client implementations.","","","Generated server implementations.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enable decompressing responses.","","","","","Attempt to create a new client by connecting to a given …","","","Returns the argument unchanged.","","Calls U::from(self).","","Limits the maximum size of a decoded message.","Limits the maximum size of an encoded message.","","","Compress requests with the given encoding.","","","","","","","","","Generated trait containing gRPC methods that should be …","","Enable decompressing requests with the given encoding.","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","Limits the maximum size of a decoded message.","Limits the maximum size of an encoded message.","","","","","Compress responses with the given encoding, if the client …","","","","","","","","An enumeration representing the types of Chaum-Pedersen …","","","","An enumeration representing the types of elliptic curves.","","","","","An enumeration representing the types of RFC MODP groups.","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","A trait for converting types to and from byte …","Constructs an object from a byte array.","Converts the provided object to a byte array.","Defines a trait for generating random values of a given …","Generates a random value of type T.","A struct representing the zero-knowledge authentication …","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","Generated client implementations.","","","Generated server implementations.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enable decompressing responses.","","","","","Attempt to create a new client by connecting to a given …","","","Returns the argument unchanged.","","Calls U::from(self).","","Limits the maximum size of a decoded message.","Limits the maximum size of an encoded message.","","","Compress requests with the given encoding.","","","","","","","","","Generated trait containing gRPC methods that should be …","","Enable decompressing requests with the given encoding.","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","Limits the maximum size of a decoded message.","Limits the maximum size of an encoded message.","","","","","Compress responses with the given encoding, if the client …","","","","","","",""],"i":[0,0,0,0,0,0,68,0,68,68,68,0,68,68,2,2,68,68,2,2,68,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,2,68,0,2,0,0,0,0,0,0,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,15,16,17,18,19,20,0,80,80,80,80,80,80,80,80,80,80,80,80,80,0,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,0,81,81,81,81,81,81,81,81,81,81,81,81,81,0,0,82,82,82,82,82,82,82,82,82,82,82,82,82,0,24,24,24,24,0,24,24,24,24,24,24,24,24,24,0,0,0,0,0,0,0,0,37,38,0,34,35,36,37,38,39,34,35,36,37,38,39,37,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,36,36,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,35,36,37,38,39,34,36,34,35,36,37,38,39,34,34,0,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,0,0,54,54,54,54,54,54,54,53,54,54,54,54,54,54,54,54,54,54,54,54,53,54,54,54,54,54,53,54,54,0,64,65,64,0,65,63,63,63,0,65,63,64,65,63,64,65,63,64,65,63,63,64,64,65,65,63,64,65,63,64,65,63,64,65,63,64,65,63,64,65,63,63,64,64,65,65,63,64,65,63,64,65,63,64,65,0,30,30,0,31,0,70,70,70,70,70,70,70,70,70,70,70,70,70,0,0,0,0,0,0,0,0,75,73,0,72,74,71,75,73,76,72,74,71,75,73,76,75,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,71,71,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,74,71,75,73,76,72,71,72,74,71,75,73,76,72,72,0,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,0,0,79,79,79,79,79,79,79,78,79,79,79,79,79,79,79,79,79,79,79,79,78,79,79,79,79,79,78,79,79],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[[2,[1]]],[[2,[1]]]],[[]],[[]],0,0,0,[[[2,[3]],4],5],[[]],[[]],[6,[[8,[[2,[7]]]]]],[6,[[8,[[2,[9]]]]]],[6,[[8,[[2,[10]]]]]],[6,[[8,[[2,[11]]]]]],0,0,[[]],[[],12],0,0,0,0,[[]],[[],8],[[],8],[[],13],[[],14],0,[[]],0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[15,[[2,[9]]]],[16,[[2,[9]]]],[17,[[2,[9]]]],[18,[[2,[11]]]],[19,[[2,[7]]]],[20,[[2,[10]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],13],[[],13],[[],13],[[],13],[[],13],[[],13],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[[2,[11]]]],[[]],[[]],[[]],[[]],[[],12],[[],8],[[],8],[[],13],[[],14],[[]],0,[[]],[[]],[[[2,[9]]],9],[[]],[21,21],[[]],[[]],[[]],[[]],[[]],[[],12],[[]],[[],8],[[],8],[[],13],[[],14],[[]],0,[[]],[[]],[[[2,[7]]]],[[]],[[]],[[]],[[]],[[],12],[[],8],[[],8],[[],13],[[],14],[[]],[[],14],0,[[]],[[]],[[[2,[10]]]],[[]],[[]],[[]],[[]],[[],12],[[],8],[[],8],[[],13],[[],14],[[]],0,[[]],[[]],[[[23,[22]]],[[8,[24,25]]]],[[24,26,[28,[27]],[28,[27]]],[[8,[29]]]],[[[2,[[0,[[30,[[0,[[30,[[0,[[30,[[0,[30,31]]]],[31,[[0,[30,31]]]]]]]],[31,[[0,[[30,[[0,[30,31]]]],[31,[[0,[30,31]]]]]]]]]]]],[31,[[0,[[30,[[0,[[30,[[0,[30,31]]]],[31,[[0,[30,31]]]]]]]],[31,[[0,[[30,[[0,[30,31]]]],[31,[[0,[30,31]]]]]]]]]]]]]]]],26,24],[[8,[[33,[32]]]]]],[[]],[[]],[[],12],[[24,26,[28,[27]],[28,[27]]],[[8,[29]]]],[[],8],[[],8],[[],13],[[24,26,[28,[27]]],[[8,[26,29]]]],[[]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[34],[35],[36],[37],[38],[39],[34,34],[35,35],[36,36],[37,37],[38,38],[39,39],[[]],[[]],[[]],[[]],[[]],[[]],[[],34],[[],35],[[],36],[[],37],[[],38],[[],39],[34,40],[35,40],[36,40],[37,40],[38,40],[39,40],[[34,34],14],[[35,35],14],[[36,36],14],[[37,37],14],[[38,38],14],[[39,39],14],[[34,4],5],[[35,4],5],[[36,4],5],[[37,4],5],[[38,4],5],[[39,4],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],13],[[],13],[[],13],[[],13],[[],13],[[],13],0,0,[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[[43,[[42,[41]]]],44],[[43,[[42,[41]]]]]],[[]],[[]],[[[43,[1]]],[[43,[1]]]],[[]],[[[23,[22]]],[[8,[[43,[45]],25]]]],[[[43,[[42,[41]]]],[46,[36]]],[[8,[[47,[37]],29]]]],[[[43,[3]],4],5],[[]],[[]],[[]],[[],12],[[[43,[[42,[41]]]],40],[[43,[[42,[41]]]]]],[[[43,[[42,[41]]]],40],[[43,[[42,[41]]]]]],[[[42,[41]]],[[43,[[42,[41]]]]]],[[[43,[[42,[41]]]],[46,[34]]],[[8,[[47,[35]],29]]]],[[[43,[[42,[41]]]],44],[[43,[[42,[41]]]]]],[[]],[[],8],[[],8],[[],13],[[[43,[[42,[41]]]],[46,[38]]],[[8,[[47,[39]],29]]]],[[]],[[[49,[[48,[41]]]],[42,[41]],50],[[43,[[51,[[49,[[48,[41]]]],[42,[41]],50]]]]]],[[[42,[41]],52],[[43,[[42,[41]]]]]],0,0,[[[54,[53]],44],[[54,[53]]]],[[]],[[]],[48],[[[54,[53]],[48,[[0,[55,56]]]]]],[[[54,[53]]],[[54,[53]]]],[[]],[[[12,[36]]],[[58,[[33,[57]]]]]],[[[54,[[0,[3,53]]]],4],5],[[]],[[[59,[53]]],[[54,[53]]]],[[]],[[]],[[],60],[[],12],[[[54,[53]],40],[[54,[53]]]],[[[54,[53]],40],[[54,[53]]]],[53,[[54,[53]]]],[[[54,[53]],61],[[62,[8]]]],[61,[[62,[8]]]],[[[12,[34]]],[[58,[[33,[57]]]]]],[[[54,[53]],44],[[54,[53]]]],[[]],[[],8],[[],8],[[],13],[[[12,[38]]],[[58,[[33,[57]]]]]],[[]],[[53,50],[[51,[[54,[53]],50]]]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[63,63],14],[[64,64],14],[[65,65],14],[[63,4],[[8,[66]]]],[[63,4],5],[[64,4],5],[[64,4],[[8,[66]]]],[[65,4],5],[[65,4],[[8,[66]]]],[[]],[[]],[[]],[6,[[8,[63]]]],[6,[[8,[64]]]],[6,[[8,[65]]]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],26],[[],26],[[],26],[[],8],[6,[[8,[63]]]],[6,[[8,[64]]]],[[],8],[6,[[8,[65]]]],[[],8],[[],8],[[],8],[[],8],[[],13],[[],13],[[],13],[[]],[[]],[[]],0,[[[67,[27]]],[[8,[[33,[32]]]]]],[[],[[28,[27]]]],0,[[],[[8,[[33,[32]]]]]],0,[[]],[[]],[[[70,[[0,[68,69,56]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]],[12,[71]]],[[58,[[33,[57]]]]]],[[]],[[]],[[],12],[[[2,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]]],[[70,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]]]],[[[70,[[0,[68,69,56]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]],[12,[72]]],[[58,[[33,[57]]]]]],[[],8],[[],8],[[],13],[[[70,[[0,[68,69,56]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]],[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,[30,[[0,[56,69,1,30]]]]]]]]]]]]]]]],[12,[73]]],[[58,[[33,[57]]]]]],[[]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[72],[74],[71],[75],[73],[76],[72,72],[74,74],[71,71],[75,75],[73,73],[76,76],[[]],[[]],[[]],[[]],[[]],[[]],[[],72],[[],74],[[],71],[[],75],[[],73],[[],76],[72,40],[74,40],[71,40],[75,40],[73,40],[76,40],[[72,72],14],[[74,74],14],[[71,71],14],[[75,75],14],[[73,73],14],[[76,76],14],[[72,4],5],[[74,4],5],[[71,4],5],[[75,4],5],[[73,4],5],[[76,4],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],12],[[],12],[[],12],[[],12],[[],12],[[],12],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],13],[[],13],[[],13],[[],13],[[],13],[[],13],0,0,[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[[77,[[42,[41]]]],44],[[77,[[42,[41]]]]]],[[]],[[]],[[[77,[1]]],[[77,[1]]]],[[]],[[[23,[22]]],[[8,[[77,[45]],25]]]],[[[77,[[42,[41]]]],[46,[71]]],[[8,[[47,[75]],29]]]],[[[77,[3]],4],5],[[]],[[]],[[]],[[],12],[[[77,[[42,[41]]]],40],[[77,[[42,[41]]]]]],[[[77,[[42,[41]]]],40],[[77,[[42,[41]]]]]],[[[42,[41]]],[[77,[[42,[41]]]]]],[[[77,[[42,[41]]]],[46,[72]]],[[8,[[47,[74]],29]]]],[[[77,[[42,[41]]]],44],[[77,[[42,[41]]]]]],[[]],[[],8],[[],8],[[],13],[[[77,[[42,[41]]]],[46,[73]]],[[8,[[47,[76]],29]]]],[[]],[[[49,[[48,[41]]]],[42,[41]],50],[[77,[[51,[[49,[[48,[41]]]],[42,[41]],50]]]]]],[[[42,[41]],52],[[77,[[42,[41]]]]]],0,0,[[[79,[78]],44],[[79,[78]]]],[[]],[[]],[[[79,[78]],[48,[[0,[55,56]]]]]],[48],[[[79,[78]]],[[79,[78]]]],[[]],[[[12,[71]]],[[58,[[33,[57]]]]]],[[[79,[[0,[3,78]]]],4],5],[[]],[[[59,[78]]],[[79,[78]]]],[[]],[[]],[[],60],[[],12],[[[79,[78]],40],[[79,[78]]]],[[[79,[78]],40],[[79,[78]]]],[78,[[79,[78]]]],[[[79,[78]],61],[[62,[8]]]],[61,[[62,[8]]]],[[[12,[72]]],[[58,[[33,[57]]]]]],[[[79,[78]],44],[[79,[78]]]],[[]],[[],8],[[],8],[[],13],[[[12,[73]]],[[58,[[33,[57]]]]]],[[]],[[78,50],[[51,[[79,[78]],50]]]]],"c":[],"p":[[8,"Clone"],[3,"GroupParams"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[15,"str"],[6,"Point"],[4,"Result"],[3,"BigUint"],[6,"Point"],[3,"RistrettoPoint"],[3,"Request"],[3,"TypeId"],[15,"bool"],[3,"RFC5114_MODP_1024_160_BIT_PARAMS"],[3,"RFC5114_MODP_2048_224_BIT_PARAMS"],[3,"RFC5114_MODP_2048_256_BIT_PARAMS"],[3,"EC25519_GROUP_PARAMS"],[3,"PALLAS_GROUP_PARAMS"],[3,"VESTA_GROUP_PARAMS"],[3,"DiscreteLogChaumPedersen"],[3,"Endpoint"],[8,"TryInto"],[3,"AuthClientLib"],[3,"Error"],[3,"String"],[15,"u8"],[3,"Vec"],[3,"Status"],[8,"ByteConvertible"],[8,"RandomGenerator"],[8,"Error"],[3,"Box"],[3,"RegisterRequest"],[3,"RegisterResponse"],[3,"AuthenticationChallengeRequest"],[3,"AuthenticationChallengeResponse"],[3,"AuthenticationAnswerRequest"],[3,"AuthenticationAnswerResponse"],[15,"usize"],[6,"BoxBody"],[8,"GrpcService"],[3,"AuthClient"],[4,"CompressionEncoding"],[3,"Channel"],[8,"IntoRequest"],[3,"Response"],[3,"Request"],[8,"Service"],[8,"Interceptor"],[3,"InterceptedService"],[3,"Uri"],[8,"Auth"],[3,"AuthServer"],[8,"Body"],[8,"Send"],[8,"Future"],[3,"Pin"],[3,"Arc"],[3,"IntoMakeService"],[3,"Context"],[4,"Poll"],[4,"RfcModpType"],[4,"ChaumPedersenType"],[4,"EllipticCurveType"],[3,"Error"],[15,"slice"],[8,"ChaumPedersen"],[8,"Sync"],[3,"ZkAuth"],[3,"AuthenticationChallengeRequest"],[3,"RegisterRequest"],[3,"AuthenticationAnswerRequest"],[3,"RegisterResponse"],[3,"AuthenticationChallengeResponse"],[3,"AuthenticationAnswerResponse"],[3,"AuthClient"],[8,"Auth"],[3,"AuthServer"],[3,"Curve25519ChaumPedersen"],[3,"PallasCurveChaumPedersen"],[3,"VestaCurveChaumPedersen"]]}\
}');
if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/server/fn.main.html b/server/fn.main.html
index f15d2b4..38490ed 100644
--- a/server/fn.main.html
+++ b/server/fn.main.html
@@ -1,4 +1,4 @@
-
Main entry point for the ZKPass Chaum-Pedersen protocol server.
\ No newline at end of file
diff --git a/src/server/server.rs.html b/src/server/server.rs.html
index 18962aa..30c8a63 100644
--- a/src/server/server.rs.html
+++ b/src/server/server.rs.html
@@ -176,6 +176,8 @@
176177178
+179
+180
use curve25519_dalek::RistrettoPoint;
use num_bigint::BigUint;
use pasta_curves::pallas::Point as PallasPoint;
@@ -185,9 +187,9 @@
use strum::VariantNames;
use tonic::transport::Server;
use zk_pass::chaum_pedersen::curve25519::Curve25519ChaumPedersen;
-use zk_pass::chaum_pedersen::vesta::VestaCurveChaumPedersen;
use zk_pass::chaum_pedersen::discretelog::DiscreteLogChaumPedersen;
use zk_pass::chaum_pedersen::pallas::PallasCurveChaumPedersen;
+use zk_pass::chaum_pedersen::vesta::VestaCurveChaumPedersen;
use zk_pass::chaum_pedersen::GroupParams;
use zk_pass::cmdutil::{ChaumPedersenType, EllipticCurveType, RfcModpType};
use zk_pass::service::zkp_auth::auth_server::AuthServer;
@@ -312,44 +314,46 @@
.serve(addr)
.await?;
}
- ChaumPedersenType::EllipticCurve => match curve {
- EllipticCurveType::Ec25519 => {
- let params =
+ ChaumPedersenType::EllipticCurve => {
+ match curve {
+ EllipticCurveType::Ec25519 => {
+ let params =
GroupParams::<RistrettoPoint>::from_str(&curve.to_string()).map_err(|_| {
"Invalid elliptic curve group parameters provided in command-line arguments"
.to_string()
})?;
- let auth = ZkAuth::<Curve25519ChaumPedersen, _, _>::new(params);
- Server::builder()
- .add_service(AuthServer::new(auth))
- .serve(addr)
- .await?;
- }
+ let auth = ZkAuth::<Curve25519ChaumPedersen, _, _>::new(params);
+ Server::builder()
+ .add_service(AuthServer::new(auth))
+ .serve(addr)
+ .await?;
+ }
- EllipticCurveType::Pallas => {
- let params = GroupParams::<PallasPoint>::from_str(&curve.to_string()).map_err(|_| {
+ EllipticCurveType::Pallas => {
+ let params = GroupParams::<PallasPoint>::from_str(&curve.to_string()).map_err(|_| {
"Invalid elliptic curve group parameters provided in command-line arguments"
.to_string()
})?;
- let auth = ZkAuth::<PallasCurveChaumPedersen, _, _>::new(params);
- Server::builder()
- .add_service(AuthServer::new(auth))
- .serve(addr)
- .await?;
- }
+ let auth = ZkAuth::<PallasCurveChaumPedersen, _, _>::new(params);
+ Server::builder()
+ .add_service(AuthServer::new(auth))
+ .serve(addr)
+ .await?;
+ }
- EllipticCurveType::Vesta => {
- let params = GroupParams::<VestaPoint>::from_str(&curve.to_string()).map_err(|_| {
+ EllipticCurveType::Vesta => {
+ let params = GroupParams::<VestaPoint>::from_str(&curve.to_string()).map_err(|_| {
"Invalid elliptic curve group parameters provided in command-line arguments"
.to_string()
})?;
- let auth = ZkAuth::<VestaCurveChaumPedersen, _, _>::new(params);
- Server::builder()
- .add_service(AuthServer::new(auth))
- .serve(addr)
- .await?;
+ let auth = ZkAuth::<VestaCurveChaumPedersen, _, _>::new(params);
+ Server::builder()
+ .add_service(AuthServer::new(auth))
+ .serve(addr)
+ .await?;
+ }
}
- },
+ }
}
Ok(())
diff --git a/src/zk_pass/chaum_pedersen/constants.rs.html b/src/zk_pass/chaum_pedersen/constants.rs.html
index fa5127d..09cb37c 100644
--- a/src/zk_pass/chaum_pedersen/constants.rs.html
+++ b/src/zk_pass/chaum_pedersen/constants.rs.html
@@ -175,9 +175,9 @@
use curve25519_dalek::RistrettoPoint;
use lazy_static::lazy_static;
use num_bigint::BigUint;
-use std::str::FromStr;
use pasta_curves::pallas::Point as PallasPoint;
use pasta_curves::vesta::Point as VestaPoint;
+use std::str::FromStr;
// RFC5114_GROUP_PARAMETERS are constant Prime Order Subgroups as defined in RFC5114
// Reference: https://www.rfc-editor.org/rfc/rfc5114.html#section-2
@@ -341,4 +341,5 @@
_ => Err(()), // Returning an error for unrecognized strings.
}
}
-}
use crate::chaum_pedersen::{ChaumPedersen, GroupParams};
+use crate::conversion::ByteConvertible;
+use crate::rand::RandomGenerator;
+use curve25519_dalek::ristretto::CompressedRistretto;
use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::RistrettoPoint;
use rand::rngs::OsRng;
+use std::error::Error;
/// A struct representing the Chaum-Pedersen protocol specialized for elliptic curve groups.
/// This protocol is used for demonstrating knowledge of a secret in a zero-knowledge manner.
@@ -388,6 +492,76 @@
}
}
+/// Implementation of `ByteConvertible` for `Scalar`.
+///
+/// This implementation provides methods to convert `Scalar` objects to and from
+/// byte arrays. Scalars are fundamental in cryptographic operations and being able to
+/// serialize and deserialize them is crucial.
+impl ByteConvertible<Scalar> for Scalar {
+ fn convert_to(t: &Scalar) -> Vec<u8> {
+ t.to_bytes().to_vec()
+ }
+
+ fn convert_from(bytes: &[u8]) -> Result<Scalar, Box<dyn Error>> {
+ let array: [u8; 32] = bytes.try_into().map_err(|_| {
+ Box::new(std::io::Error::new(
+ std::io::ErrorKind::InvalidInput,
+ "Invalid bytes length for Scalar",
+ )) as Box<dyn Error>
+ })?;
+ Ok(Scalar::from_bytes_mod_order(array))
+ }
+}
+
+/// Implementation of `ByteConvertible` for `RistrettoPoint`.
+///
+/// This implementation provides methods to convert `RistrettoPoint` objects to and from
+/// byte arrays. It uses the compression and decompression features of the Ristretto group
+/// to achieve this.
+impl ByteConvertible<RistrettoPoint> for RistrettoPoint {
+ fn convert_to(t: &RistrettoPoint) -> Vec<u8> {
+ t.compress().to_bytes().to_vec()
+ }
+
+ fn convert_from(bytes: &[u8]) -> Result<RistrettoPoint, Box<dyn Error>> {
+ let compressed = CompressedRistretto::from_slice(bytes);
+ compressed?.decompress().ok_or_else(|| {
+ Box::new(std::io::Error::new(
+ std::io::ErrorKind::InvalidInput,
+ "Failed to decompress RistrettoPoint",
+ )) as Box<dyn Error>
+ })
+ }
+}
+
+// Implementation of `RandomGenerator` trait for `Scalar`.
+impl RandomGenerator<Scalar> for Scalar {
+ /// Generates a random `Scalar`.
+ ///
+ /// # Returns
+ /// A `Result` containing the random `Scalar`, or an error if the generation fails.
+ ///
+ /// # Errors
+ /// Returns an error if the conversion from bytes to `Scalar` fails.
+ fn generate_random() -> Result<Scalar, Box<dyn Error>> {
+ Ok(Scalar::random(&mut OsRng))
+ }
+}
+
+// Implementation of `RandomGenerator` trait for `RistrettoPoint`.
+impl RandomGenerator<RistrettoPoint> for RistrettoPoint {
+ /// Generates a random `RistrettoPoint`.
+ ///
+ /// # Returns
+ /// A `Result` containing the random `RistrettoPoint`, or an error if the generation fails.
+ ///
+ /// # Errors
+ /// Returns an error if the conversion from bytes to `RistrettoPoint` fails.
+ fn generate_random() -> Result<RistrettoPoint, Box<dyn std::error::Error>> {
+ Ok(RistrettoPoint::random(&mut OsRng))
+ }
+}
+
#[cfg(test)]
mod test {
use super::*;
@@ -397,6 +571,15 @@
use curve25519_dalek::constants::RISTRETTO_BASEPOINT_POINT;
use curve25519_dalek::ristretto::CompressedRistretto;
+ // Test case to ensure round-trip conversion for `RistrettoPoint`.
+ #[test]
+ fn ristretto_point_conversion_round_trip() {
+ let original = RISTRETTO_BASEPOINT_POINT * Scalar::generate_random().unwrap();
+ let bytes = RistrettoPoint::convert_to(&original);
+ let recovered = RistrettoPoint::convert_from(&bytes).unwrap();
+ assert_eq!(original, recovered);
+ }
+
fn serialize_ristretto_point(point: &RistrettoPoint) -> String {
// Compress the RistrettoPoint
let compressed_point = point.compress();
@@ -533,5 +716,22 @@
// Asserting that the received point is equal to the original compressed point.
assert_eq!(received_point, compressed_point);
}
+
+ // Test case to ensure round-trip conversion for `Scalar`.
+ #[test]
+ fn scalar_conversion_round_trip() {
+ let original = Scalar::generate_random().unwrap();
+ let bytes = Scalar::convert_to(&original);
+ let recovered = Scalar::convert_from(&bytes).unwrap();
+ assert_eq!(original, recovered);
+ }
+
+ // Test case to check for proper error handling with invalid byte length for `Scalar`.
+ #[test]
+ fn scalar_invalid_bytes_length() {
+ let bytes: Vec<u8> = vec![0; 64]; // Invalid length for Scalar conversion
+ let result = Scalar::convert_from(&bytes);
+ assert!(result.is_err());
+ }
}