aboutsummaryrefslogtreecommitdiffstats
path: root/ffi
diff options
context:
space:
mode:
Diffstat (limited to 'ffi')
-rw-r--r--ffi/cs/bls256.cs105
-rw-r--r--ffi/cs/bls256_test.cs26
2 files changed, 108 insertions, 23 deletions
diff --git a/ffi/cs/bls256.cs b/ffi/cs/bls256.cs
index ccc10e4..6e29c33 100644
--- a/ffi/cs/bls256.cs
+++ b/ffi/cs/bls256.cs
@@ -4,10 +4,8 @@ using System.Runtime.InteropServices;
namespace mcl {
class BLS256 {
-// public static int IoBin = 2;
-// public static int IoDec = 10;
-// public static int IoHex = 16;
-// public static int IoEcComp = 512; // fixed byte representation
+ const int IoEcComp = 512; // fixed byte representation
+ public const int maxUnitSize = 4;
[DllImport("bls256.dll")]
public static extern int blsInit(int curve, int maxUnitSize);
[DllImport("bls256.dll")]
@@ -22,10 +20,6 @@ namespace mcl {
[DllImport("bls256.dll")]
public static extern int blsSecretKeyIsSame(ref SecretKey lhs, ref SecretKey rhs);
[DllImport("bls256.dll")]
- public static extern void blsSecretKeyPut(ref SecretKey sec);
- [DllImport("bls256.dll")]
- public static extern void blsSecretKeyCopy(ref SecretKey dst, ref SecretKey src);
- [DllImport("bls256.dll")]
public static extern void blsSecretKeySetArray(ref SecretKey sec, ref ulong p);
[DllImport("bls256.dll")]
public static extern int blsSecretKeySetStr(ref SecretKey sec, [In][MarshalAs(UnmanagedType.LPStr)] string buf, ulong bufSize, int ioMode);
@@ -38,13 +32,13 @@ namespace mcl {
[DllImport("bls256.dll")]
public static extern void blsSecretKeyGetPublicKey(ref SecretKey sec, ref PublicKey pub);
[DllImport("bls256.dll")]
- public static extern void blsSecretKeySign(ref SecretKey sec, ref Sign sign, [In][MarshalAs(UnmanagedType.LPStr)] string m, ulong size);
+ public static extern void blsSecretKeySign(ref SecretKey sec, ref Signature sign, [In][MarshalAs(UnmanagedType.LPStr)] string m, ulong size);
[DllImport("bls256.dll")]
public static extern int blsSecretKeySet(ref SecretKey sec, ref SecretKey msk, ulong k, ref Id id);
[DllImport("bls256.dll")]
public static extern int blsSecretKeyRecover(ref SecretKey sec, ref SecretKey secVec, ref Id idVec, ulong n);
[DllImport("bls256.dll")]
- public static extern void blsSecretKeyGetPop(ref SecretKey sec, ref Sign sign);
+ public static extern void blsSecretKeyGetPop(ref SecretKey sec, ref Signature sign);
[DllImport("bls256.dll")]
public static extern int blsPublicKeyIsSame(ref PublicKey lhs, ref PublicKey rhs);
[DllImport("bls256.dll")]
@@ -62,28 +56,27 @@ namespace mcl {
[DllImport("bls256.dll")]
public static extern int blsPublicKeyRecover(ref PublicKey pub, ref PublicKey pubVec, ref Id idVec, ulong n);
[DllImport("bls256.dll")]
- public static extern int blsSignIsSame(ref Sign lhs, ref Sign rhs);
+ public static extern int blsSignIsSame(ref Signature lhs, ref Signature rhs);
[DllImport("bls256.dll")]
- public static extern void blsSignPut(ref Sign sign);
+ public static extern void blsSignPut(ref Signature sign);
[DllImport("bls256.dll")]
- public static extern void blsSignCopy(ref Sign dst, ref Sign src);
+ public static extern void blsSignCopy(ref Signature dst, ref Signature src);
[DllImport("bls256.dll")]
- public static extern int blsSignSetStr(ref Sign sign, [In][MarshalAs(UnmanagedType.LPStr)] string buf, ulong bufSize, int ioMode);
+ public static extern int blsSignSetStr(ref Signature sign, [In][MarshalAs(UnmanagedType.LPStr)] string buf, ulong bufSize, int ioMode);
[DllImport("bls256.dll")]
- public static extern ulong blsSignGetStr(ref Sign sign, [Out]StringBuilder buf, ulong maxBufSize, int ioMode);
+ public static extern ulong blsSignGetStr(ref Signature sign, [Out]StringBuilder buf, ulong maxBufSize, int ioMode);
[DllImport("bls256.dll")]
- public static extern void blsSignAdd(ref Sign sign, ref Sign rhs);
+ public static extern void blsSignAdd(ref Signature sign, ref Signature rhs);
[DllImport("bls256.dll")]
- public static extern int blsSignRecover(ref Sign sign, ref Sign signVec, ref Id idVec, ulong n);
+ public static extern int blsSignRecover(ref Signature sign, ref Signature signVec, ref Id idVec, ulong n);
[DllImport("bls256.dll")]
- public static extern int blsSignVerify(ref Sign sign, ref PublicKey pub, [In][MarshalAs(UnmanagedType.LPStr)] string m, ulong size);
+ public static extern int blsSignVerify(ref Signature sign, ref PublicKey pub, [In][MarshalAs(UnmanagedType.LPStr)] string m, ulong size);
[DllImport("bls256.dll")]
- public static extern int blsSignVerifyPop(ref Sign sign, ref PublicKey pub);
+ public static extern int blsSignVerifyPop(ref Signature sign, ref PublicKey pub);
public static void Init()
{
const int CurveFp254BNb = 0;
- const int maxUnitSize = 4;
if (!System.Environment.Is64BitProcess) {
throw new PlatformNotSupportedException("not 64-bit system");
}
@@ -114,11 +107,81 @@ namespace mcl {
}
return sb.ToString(0, (int)size);
}
+ public override string ToString()
+ {
+ return GetStr(16);
+ }
+ public void SetArray(ulong[] p)
+ {
+ int n = p.Length;
+ if (n != maxUnitSize) {
+ throw new InvalidOperationException("SetArray:" + n.ToString());
+ }
+ blsIdSet(ref this, ref p[0]);
+ }
}
public struct SecretKey {
private ulong v0, v1, v2, v3;
+ public bool IsSame(SecretKey rhs)
+ {
+ return blsSecretKeyIsSame(ref this, ref rhs) != 0;
+ }
+ public void SetStr(String s, int ioMode)
+ {
+ if (blsSecretKeySetStr(ref this, s, (ulong)s.Length, ioMode) != 0) {
+ throw new InvalidOperationException("blsSecretKeySetStr:" + s);
+ }
+ }
+ public string GetStr(int ioMode)
+ {
+ StringBuilder sb = new StringBuilder(1024);
+ ulong size = blsSecretKeyGetStr(ref this, sb, (ulong)sb.Capacity + 1, ioMode);
+ if (size == 0) {
+ throw new InvalidOperationException("blsSecretKeyGetStr");
+ }
+ return sb.ToString(0, (int)size);
+ }
+ public override string ToString()
+ {
+ return GetStr(16);
+ }
+ public void SetArray(ulong[] p)
+ {
+ int n = p.Length;
+ if (n != maxUnitSize) {
+ throw new InvalidOperationException("SetArray:" + n.ToString());
+ }
+ blsSecretKeySetArray(ref this, ref p[0]);
+ }
+ public void Add(SecretKey rhs)
+ {
+ blsSecretKeyAdd(ref this, ref rhs);
+ }
+ public void Init()
+ {
+ blsSecretKeyInit(ref this);
+ }
+ public PublicKey GetPublicKey()
+ {
+ PublicKey pub = new PublicKey();
+ blsSecretKeyGetPublicKey(ref this, ref pub);
+ return pub;
+ }
+ public Signature Sign(String m)
+ {
+ Signature sign = new Signature();
+ blsSecretKeySign(ref this, ref sign, m, (ulong)m.Length);
+ return sign;
+ }
+ // secretKey = sum_{i=0}^{msk.Length - 1} msk[i] * id^i
+ public void ShareById(SecretKey[] msk, Id id)
+ {
+ if (blsSecretKeySet(ref this, ref msk[0], (ulong)msk.Length, ref id) != 0) {
+ throw new InvalidOperationException("GetSecretKeyForId:" + id.ToString());
+ }
+ }
}
- public struct Sign {
+ public struct Signature {
private ulong v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11;
}
public struct PublicKey {
diff --git a/ffi/cs/bls256_test.cs b/ffi/cs/bls256_test.cs
index f649ddc..5c358fe 100644
--- a/ffi/cs/bls256_test.cs
+++ b/ffi/cs/bls256_test.cs
@@ -15,14 +15,36 @@ namespace mcl {
Console.WriteLine("TestId");
Id id = new Id();
id.SetStr("255", 10);
- Console.WriteLine("id={0}", id.GetStr(10));
- Console.WriteLine("id={0}", id.GetStr(16));
+ assert("GetStr(10)", id.GetStr(10) == "255");
+ assert("GetStr(16)", id.GetStr(16) == "ff");
+ id.SetArray(new ulong[] { 1, 2, 3, 4 });
+ assert("GetStr(16)", id.GetStr(16) == "4000000000000000300000000000000020000000000000001");
+ }
+ static void TestSecretKey()
+ {
+ Console.WriteLine("TestSecretKey");
+ SecretKey sec = new SecretKey();
+ sec.SetStr("255", 10);
+ assert("GetStr(10)", sec.GetStr(10) == "255");
+ assert("GetStr(16)", sec.GetStr(16) == "ff");
+ sec.SetArray(new ulong[] { 1, 2, 3, 4 });
+ assert("GetStr(16)", sec.GetStr(16) == "4000000000000000300000000000000020000000000000001");
+ {
+ SecretKey sec2 = new SecretKey();
+ sec.SetStr("321", 10);
+ sec2.SetStr("4000", 10);
+ sec.Add(sec2);
+ assert("sec.Add", sec.GetStr(10) == "4321");
+ sec.Init();
+ Console.WriteLine("sec.Init={0}", sec);
+ }
}
static void Main(string[] args)
{
try {
Init();
TestId();
+ TestSecretKey();
if (err == 0) {
Console.WriteLine("all tests succeed");
} else {