public static byte[] GetDiscoveryResponseData(DiscoveryResponse response, ICollection <RemoteAttestation> attestations)
 {
     foreach (RemoteAttestation attestation in attestations)
     {
         if (Enumerable.SequenceEqual(response.RequestId, attestation.RequestId))
         {
             return(AesCipher.Decrypt(attestation.Keys.ServerKey, response.Iv !, response.Data !, response.Mac !));
         }
     }
     throw new NoMatchingRequestIdException();
 }
        public static DiscoveryRequest CreateDiscoveryRequest(IList <string> addressBook, Dictionary <string, RemoteAttestation> remoteAttestations)
        {
            byte[] queryDataKey = Util.GetSecretBytes(32);
            byte[] queryData    = BuildQueryData(addressBook);
            AesCipher.AesEncryptedResult encryptedQueryData = AesCipher.Encrypt(queryDataKey, null, queryData);
            byte[] commitment = CryptoUtil.Sha256(queryData);
            Dictionary <string, QueryEnvelope> envelopes = new Dictionary <string, QueryEnvelope>(remoteAttestations.Count);

            foreach (var entry in remoteAttestations)
            {
                envelopes.Add(entry.Key,
                              BuildQueryEnvelope(entry.Value.RequestId, entry.Value.Keys.ClientKey, queryDataKey));
            }

            return(new DiscoveryRequest(addressBook.Count,
                                        commitment,
                                        encryptedQueryData.iv,
                                        encryptedQueryData.data,
                                        encryptedQueryData.mac,
                                        envelopes));
        }
 private static QueryEnvelope BuildQueryEnvelope(byte[] requestId, byte[] clientKey, byte[] queryDataKey)
 {
     AesCipher.AesEncryptedResult result = AesCipher.Encrypt(clientKey, requestId, queryDataKey);
     return(new QueryEnvelope(requestId, result.iv, result.data, result.mac));
 }
예제 #4
0
 public static byte[] GetRequestId(RemoteAttestationKeys keys, RemoteAttestationResponse response)
 {
     return(AesCipher.Decrypt(keys.ServerKey, response.Iv, response.Ciphertext, response.Tag));
 }