Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,47 +4,47 @@

namespace Chaos.NaCl
{
internal static class Ed25519
{
public static readonly int PublicKeySizeInBytes = 32;
public static readonly int SignatureSizeInBytes = 64;
public static readonly int ExpandedPrivateKeySizeInBytes = 32 * 2;
public static readonly int PrivateKeySeedSizeInBytes = 32;
public static readonly int SharedKeySizeInBytes = 32;
internal static class Ed25519
{
public static readonly int PublicKeySizeInBytes = 32;
public static readonly int SignatureSizeInBytes = 64;
public static readonly int ExpandedPrivateKeySizeInBytes = 32 * 2;
public static readonly int PrivateKeySeedSizeInBytes = 32;
public static readonly int SharedKeySizeInBytes = 32;

public static void Sign(ArraySegment<byte> signature, ArraySegment<byte> message, ArraySegment<byte> expandedPrivateKey)
{
if (signature.Array == null)
throw new ArgumentNullException("signature.Array");
if (signature.Count != SignatureSizeInBytes)
throw new ArgumentException("signature.Count");
if (expandedPrivateKey.Array == null)
throw new ArgumentNullException("expandedPrivateKey.Array");
if (expandedPrivateKey.Count != ExpandedPrivateKeySizeInBytes)
throw new ArgumentException("expandedPrivateKey.Count");
if (message.Array == null)
throw new ArgumentNullException("message.Array");
Ed25519Operations.crypto_sign2(signature.Array, signature.Offset, message.Array, message.Offset, message.Count, expandedPrivateKey.Array, expandedPrivateKey.Offset);
}
public static void Sign(ArraySegment<byte> signature, ArraySegment<byte> message, ArraySegment<byte> expandedPrivateKey)
{
if (signature.Array == null)
throw new ArgumentNullException("signature.Array");
if (signature.Count != SignatureSizeInBytes)
throw new ArgumentException("signature.Count");
if (expandedPrivateKey.Array == null)
throw new ArgumentNullException("expandedPrivateKey.Array");
if (expandedPrivateKey.Count != ExpandedPrivateKeySizeInBytes)
throw new ArgumentException("expandedPrivateKey.Count");
if (message.Array == null)
throw new ArgumentNullException("message.Array");
Ed25519Operations.crypto_sign2(signature.Array, signature.Offset, message.Array, message.Offset, message.Count, expandedPrivateKey.Array, expandedPrivateKey.Offset);
}

public static byte[] Sign(byte[] message, byte[] expandedPrivateKey)
{
var signature = new byte[SignatureSizeInBytes];
Sign(new ArraySegment<byte>(signature), new ArraySegment<byte>(message), new ArraySegment<byte>(expandedPrivateKey));
return signature;
}
public static byte[] Sign(byte[] message, byte[] expandedPrivateKey)
{
var signature = new byte[SignatureSizeInBytes];
Sign(new ArraySegment<byte>(signature), new ArraySegment<byte>(message), new ArraySegment<byte>(expandedPrivateKey));
return signature;
}

public static void KeyPairFromSeed(out byte[] publicKey, out byte[] expandedPrivateKey, byte[] privateKeySeed)
{
if (privateKeySeed == null)
throw new ArgumentNullException("privateKeySeed");
if (privateKeySeed.Length != PrivateKeySeedSizeInBytes)
throw new ArgumentException("privateKeySeed");
var pk = new byte[PublicKeySizeInBytes];
var sk = new byte[ExpandedPrivateKeySizeInBytes];
Ed25519Operations.crypto_sign_keypair(pk, 0, sk, 0, privateKeySeed, 0);
publicKey = pk;
expandedPrivateKey = sk;
}
}
public static void KeyPairFromSeed(out byte[] publicKey, out byte[] expandedPrivateKey, byte[] privateKeySeed)
{
if (privateKeySeed == null)
throw new ArgumentNullException("privateKeySeed");
if (privateKeySeed.Length != PrivateKeySeedSizeInBytes)
throw new ArgumentException("privateKeySeed");
var pk = new byte[PublicKeySizeInBytes];
var sk = new byte[ExpandedPrivateKeySizeInBytes];
Ed25519Operations.crypto_sign_keypair(pk, 0, sk, 0, privateKeySeed, 0);
publicKey = pk;
expandedPrivateKey = sk;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,32 @@ namespace Chaos.NaCl.Internal.Ed25519Ref10;

internal struct FieldElement
{
internal int x0;
internal int x1;
internal int x2;
internal int x3;
internal int x4;
internal int x5;
internal int x6;
internal int x7;
internal int x8;
internal int x9;
internal int x0;
internal int x1;
internal int x2;
internal int x3;
internal int x4;
internal int x5;
internal int x6;
internal int x7;
internal int x8;
internal int x9;

//public static readonly FieldElement Zero = new FieldElement();
//public static readonly FieldElement One = new FieldElement() { x0 = 1 };
//public static readonly FieldElement Zero = new FieldElement();
//public static readonly FieldElement One = new FieldElement() { x0 = 1 };

internal FieldElement(params int[] elements)
{
InternalAssert.Assert(elements.Length == 10, "elements.Length != 10");
x0 = elements[0];
x1 = elements[1];
x2 = elements[2];
x3 = elements[3];
x4 = elements[4];
x5 = elements[5];
x6 = elements[6];
x7 = elements[7];
x8 = elements[8];
x9 = elements[9];
}
internal FieldElement(params int[] elements)
{
InternalAssert.Assert(elements.Length == 10, "elements.Length != 10");
x0 = elements[0];
x1 = elements[1];
x2 = elements[2];
x3 = elements[3];
x4 = elements[4];
x5 = elements[5];
x6 = elements[6];
x7 = elements[7];
x8 = elements[8];
x9 = elements[9];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,23 @@ internal struct GroupElementP2
public FieldElement X;
public FieldElement Y;
public FieldElement Z;
} ;
};

internal struct GroupElementP3
{
public FieldElement X;
public FieldElement Y;
public FieldElement Z;
public FieldElement T;
} ;
};

internal struct GroupElementP1P1
{
public FieldElement X;
public FieldElement Y;
public FieldElement Z;
public FieldElement T;
} ;
};

internal struct GroupElementPreComp
{
Expand All @@ -51,13 +51,13 @@ public GroupElementPreComp(FieldElement yplusx, FieldElement yminusx, FieldEleme
this.yminusx = yminusx;
this.xy2d = xy2d;
}
} ;
};

internal struct GroupElementCached
{
public FieldElement YplusX;
public FieldElement YminusX;
public FieldElement Z;
public FieldElement T2d;
} ;
};
}
Loading