Question
Create a signature with ECDsaP256
Solution
// Signature.cpp : main project file.
#include "stdafx.h"
#using <System.Core.dll>
#using <mscorlib.dll>
using namespace System;
using namespace System::Security::Cryptography;
using namespace System::Text;
int main(array<System::String ^> ^args)
{
//Creates a CngKey object that represents a new key
CngKey^ aliceKeySignature = CngKey::Create(CngAlgorithm::ECDsaP256);
// Get Alice public key
array<unsigned char, 1>^ alicePubKeyBlob = aliceKeySignature->Export(CngKeyBlobFormat::GenericPublicBlob);
array<unsigned char>^ aliceData = Encoding::UTF8->GetBytes("Alice");
// Encoding signiture with public key
ECDsaCng^ signingAlg = gcnew ECDsaCng(aliceKeySignature);
array<unsigned char>^ aliceSignature;
try{
aliceSignature = signingAlg->SignData(aliceData);
signingAlg->Clear();
}
finally{
delete signingAlg;
}
Console::WriteLine("Alice created signature: {0}",Convert::ToBase64String(aliceSignature));
// Verify signature
bool matched = false;
CngKey^ key = CngKey::Import(alicePubKeyBlob, CngKeyBlobFormat::GenericPublicBlob);
signingAlg = gcnew ECDsaCng(key);
try{
matched = signingAlg->VerifyData(aliceData, aliceSignature);
signingAlg->Clear();
Console::WriteLine(matched);
}
finally{
delete signingAlg;
}
return 0;
}
Output
Alice created signature: dywy5jpWv3D4IlMuum6bIDj+L60j/xsZvPA6fGFkPtMkITik8ZnWwU9GnNuI6MYUbvxjOsue2jlUB1j+Y7rhJg==
True
Press any key to continue . . .