Skip to content

Instantly share code, notes, and snippets.

@Carlos-Augusto
Created October 5, 2020 14:01
Show Gist options
  • Save Carlos-Augusto/214bdbf4b8cf7137627ff542c99dc973 to your computer and use it in GitHub Desktop.
Save Carlos-Augusto/214bdbf4b8cf7137627ff542c99dc973 to your computer and use it in GitHub Desktop.
Dart PointyCastle Experiment
import 'package:experiment/Unpacker.dart';
import 'package:pointycastle/export.dart' hide ECFieldElement, ECPoint;
import 'package:pointycastle/ecc/ecc_fp.dart';
import 'dart:convert';
/// {
/// "chain":"9uKhoi3zz9gCa6HGW/e6yqCSZIK1aA24aWokmE9WCEYxmhGmRAP6VadirVR1P/EJQThRF9HStAOLa+QJLiuaFg==",
/// "hint":0,
/// "payload":"1ENYKuJyh2ab/a7ozIyEHLFdVX+ERFIKjU5GRjgTaI4=",
/// "signature":"09m6U3mzT0G6i4wQiLOXd7uKdUyEia4BEtgHj9wKMQH7HLlIHdTQmoanSjqirBjU68KhcpqjGG4/7UdgKa8lfA==",
/// "signed":"liPEELGTockiA0KJq5UQnUrg0nPEQPbioaIt88/YAmuhxlv3usqgkmSCtWgNuGlqJJhPVghGMZoRpkQD+lWnYq1UdT/xCUE4URfR0rQDi2vkCS4rmhYAxCDUQ1gq4nKHZpv9rujMjIQcsV1Vf4REUgqNTkZGOBNojg==",
/// "uuid":"b193a1c9-2203-4289-ab95-109d4ae0d273",
/// "version":35
/// }
void main(List<String> arguments) {
var uppAsBase64 =
'liPEELGTockiA0KJq5UQnUrg0nPEQPbioaIt88/YAmuhxlv3usqgkmSCtWgNuGlqJJhPVghGMZoRpkQD+lWnYq1UdT/xCUE4URfR0rQDi2vkCS4rmhYAxCDUQ1gq4nKHZpv9rujMjIQcsV1Vf4REUgqNTkZGOBNojsRA09m6U3mzT0G6i4wQiLOXd7uKdUyEia4BEtgHj9wKMQH7HLlIHdTQmoanSjqirBjU68KhcpqjGG4/7UdgKa8lfA==';
var bytes = base64.decode(uppAsBase64);
var unpacker = Unpacker.fromList(bytes);
var _ = unpacker.unpackListIndexed(unpacker.unpackListLength() - 1);
var bytesConsumed = unpacker.bytesConsumed();
var signature = unpacker.unpackBinary();
var signatureB = base64.encode(signature);
var signed = bytes.sublist(0, bytesConsumed);
var signedB = base64.encode(signed);
var expectedSigned =
'liPEELGTockiA0KJq5UQnUrg0nPEQPbioaIt88/YAmuhxlv3usqgkmSCtWgNuGlqJJhPVghGMZoRpkQD+lWnYq1UdT/xCUE4URfR0rQDi2vkCS4rmhYAxCDUQ1gq4nKHZpv9rujMjIQcsV1Vf4REUgqNTkZGOBNojg==';
var sameSignedData = signedB == expectedSigned;
var expectedSignature =
'09m6U3mzT0G6i4wQiLOXd7uKdUyEia4BEtgHj9wKMQH7HLlIHdTQmoanSjqirBjU68KhcpqjGG4/7UdgKa8lfA==';
var sameSignatures = signatureB == expectedSignature;
print('total_bytes=' + bytes.length.toString());
print('total_bytes_signed=' + signed.length.toString());
print('signed =' + signedB);
print('signature=' + signatureB);
print('same_signed=' + sameSignedData.toString());
print('same_signature=' + sameSignatures.toString());
var key = base64.decode('AJCfwa3Tfu7ydJrNdJcahTpLMi+Tkk3VTCy9u9AmbY10osu4krJibZ0CUZ0kqUnawrIIJZEYhpEFgW09j0Lp9A==');
var keyLength = key.length;
var keyLengthHalf = keyLength ~/ 2;
//ecdsa-p256v1
var a = ECCurve_prime256v1();
var params = ECDomainParametersImpl(a.domainName, a.curve, a.G, a.n);
var x1b = key.sublist(0, keyLengthHalf);
var y1b = key.sublist(keyLengthHalf, keyLength);
// var point = params.curve.createPoint(x1b, y1b);
// var k1 = ECPublicKey(point, params);
/////
var x = BigInt.parse("255528576572964601323545154709225394244601557630261293798747932549422935437");
var y = BigInt.parse("52755925690740562257257088612280742564365253582741057443848848827679433222644");
var point2 = params.curve.createPoint(x, y);
var k2 = ECPublicKey(point2, params);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment