Example #1
0
        private void VerifyResponse(HttpResponseMessage responseMessage, string content)
        {
            var serverSignatureHeader = responseMessage.Headers.FirstOrDefault(h => h.Key == ServerSignatureHeaderName).Value.FirstOrDefault();

            if (serverSignatureHeader == null)
            {
                throw new BunqApiException("Server sent an invalid response. No signature header found.");
            }

            var builder = new StringBuilder();

            builder.AppendFormat("{0}\n", (int)responseMessage.StatusCode);

            foreach (var header in responseMessage.Headers.Where(h => h.Key.StartsWith("X-Bunq-") && h.Key != ServerSignatureHeaderName).OrderBy(h => h.Key))
            {
                builder.AppendFormat("{0}: {1}\n", header.Key, header.Value.First());
            }

            builder.Append("\n");
            builder.Append(content);

            var builderBytes    = Encoding.UTF8.GetBytes(builder.ToString());
            var serverSignature = Convert.FromBase64String(serverSignatureHeader);

            if (!ServerPublicKey.VerifyData(builderBytes, serverSignature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1))
            {
                throw new BunqApiException("Server sent an invalid response. Signature invalid.");
            }
        }
    public override void OnHandleMessage(Sfs2X.Entities.Data.ISFSObject data)
    {
        ServerPublicKey pubKey = new ServerPublicKey();
        pubKey.FromSFSObject(data);

        EncryptionProvider.GetInstance().SetServerPublicKeyParameters(pubKey.parameters);
    }
    public override void OnHandleMessage(Sfs2X.Entities.Data.ISFSObject data)
    {
        ServerPublicKey pubKey = new ServerPublicKey();

        pubKey.FromSFSObject(data);

        EncryptionProvider.GetInstance().SetServerPublicKeyParameters(pubKey.parameters);
    }
Example #4
0
        private RegistrationResponse RegisterInputs(RegistrationRequest request)
        {
            pk = ComputeServerPublicKey(sk);

            var Mas = request.CredentialRequests.Mas;

            // Checks the proofs (amounts and range)
            if (request.DeltaValue == Scalar.Zero)
            {
                // Proof of NULL
                Assert.True(VerifyProofOfExponent(Mas, Generators.Gh, request.CredentialRequests.RangeProof));
            }
            else
            {
                if (request.Credentials.Length > 0)
                {
                    var(c0, (c1, (c2, (c3, _)))) = request.Credentials;

                    var B = (request.DeltaValue * Generators.Gg) +
                            (c0.Credential.Ca + c1.Credential.Ca + c2.Credential.Ca + c3.Credential.Ca) +
                            Sum(Mas).Negate();
                    Assert.True(VerifyProofOfSum(B, request.BalanceProof));
                }
            }

            // We must generate the proof of knowledge of the secret key here
            var(cr0, (cr1, (cr2, (cr3, _)))) = Mas;
            var credential0 = ComputeMAC(sk, cr0);
            var credential1 = ComputeMAC(sk, cr1);
            var credential2 = ComputeMAC(sk, cr2);
            var credential3 = ComputeMAC(sk, cr3);

            var pi_params0 = ProofOfParams(sk, cr0, credential0.U, credential0.t);
            var pi_params1 = ProofOfParams(sk, cr1, credential1.U, credential1.t);
            var pi_params2 = ProofOfParams(sk, cr2, credential2.U, credential2.t);
            var pi_params3 = ProofOfParams(sk, cr3, credential3.U, credential3.t);

            // This is what the coordinator responds to the client.
            return(new RegistrationResponse {
                iParams = pk,
                Credentials = new[] {
                    new Credential(credential0, pi_params0),
                    new Credential(credential1, pi_params1),
                    new Credential(credential2, pi_params2),
                    new Credential(credential3, pi_params3)
                }
            });
        }
Example #5
0
 internal void SetServerPublicKey(ServerPublicKey serverPublicKey)
 {
     ServerPublicKey = RSAExtensions.FromPublicKeyPemString(serverPublicKey.Value);
 }
Example #6
0
 public void SetServerPublicKey(ServerPublicKey serverPublicKey)
 {
     _serverPublicKey = RSAExtensions.FromPemString(serverPublicKey.Value);
 }
Example #7
0
 public Installation(BunqEntity[] entities)
 {
     Id              = entities.OfType <Id>().First();
     Token           = entities.OfType <Token>().First();
     ServerPublicKey = entities.OfType <ServerPublicKey>().First();
 }