started session class and tests
This commit is contained in:
parent
734774f1a8
commit
c9f505fe6c
@ -3,13 +3,5 @@ Session(private master key, public master peer key, bool strict, int timePerKey)
|
|||||||
List<Ed25519PublicKey> pubkeys
|
List<Ed25519PublicKey> pubkeys
|
||||||
List<Ed25519PrivKey> privkeys
|
List<Ed25519PrivKey> privkeys
|
||||||
|
|
||||||
public:
|
|
||||||
encrypt()
|
|
||||||
decrypt()
|
|
||||||
deleteExpired()
|
|
||||||
|
|
||||||
|
|
||||||
byte[] SessionMessage(byte[] data)
|
|
||||||
|
|
||||||
getNewKey()
|
|
||||||
|
|
||||||
|
73
tests/session/testSession.cs
Normal file
73
tests/session/testSession.cs
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
using NUnit.Framework;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using chestcrypto.session;
|
||||||
|
using chestcrypto.exceptions;
|
||||||
|
using Sodium;
|
||||||
|
|
||||||
|
namespace sessionTests
|
||||||
|
{
|
||||||
|
public class Tests
|
||||||
|
{
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getFutureTime(int seconds){
|
||||||
|
return DateTimeOffset.UtcNow.ToUnixTimeSeconds() + (long) seconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestSessionAddValidPublic(){
|
||||||
|
byte[] publicK = PublicKeyBox.GenerateKeyPair().PublicKey;
|
||||||
|
byte[] privateK = PublicKeyBox.GenerateKeyPair().PrivateKey;
|
||||||
|
byte[] newK = PublicKeyBox.GenerateKeyPair().PublicKey;
|
||||||
|
Session session = new Session(privateK, publicK, true);
|
||||||
|
session.addPublic(newK, getFutureTime(61));
|
||||||
|
Assert.IsTrue(Enumerable.SequenceEqual(newK, session.getLatestPublicKey()));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestSessionAddPublicInvalidTime(){
|
||||||
|
byte[] publicK = PublicKeyBox.GenerateKeyPair().PublicKey;
|
||||||
|
byte[] privateK = PublicKeyBox.GenerateKeyPair().PrivateKey;
|
||||||
|
byte[] newK = PublicKeyBox.GenerateKeyPair().PublicKey;
|
||||||
|
Session session = new Session(privateK, publicK, true);
|
||||||
|
try{
|
||||||
|
session.addPublic(newK, getFutureTime(-1));
|
||||||
|
}
|
||||||
|
catch(System.ArgumentOutOfRangeException){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Assert.Fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestSessionConstructor()
|
||||||
|
{
|
||||||
|
byte[] publicK = PublicKeyBox.GenerateKeyPair().PublicKey;
|
||||||
|
byte[] privateK = PublicKeyBox.GenerateKeyPair().PrivateKey;
|
||||||
|
Session session = new Session(privateK, publicK, true);
|
||||||
|
byte[] invalid = {0, 0, 0};
|
||||||
|
|
||||||
|
try{
|
||||||
|
new Session(invalid, publicK, true);
|
||||||
|
}
|
||||||
|
catch(InvalidKeyLength){
|
||||||
|
goto secondAssert;
|
||||||
|
}
|
||||||
|
Assert.Fail();
|
||||||
|
secondAssert:
|
||||||
|
try{
|
||||||
|
new Session(privateK, invalid, true);
|
||||||
|
}
|
||||||
|
catch(InvalidKeyLength){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Assert.Fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
0
treasurechest/chestcrypto/session/message.cs
Normal file
0
treasurechest/chestcrypto/session/message.cs
Normal file
44
treasurechest/chestcrypto/session/session.cs
Normal file
44
treasurechest/chestcrypto/session/session.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System;
|
||||||
|
using chestcrypto.exceptions;
|
||||||
|
|
||||||
|
namespace chestcrypto{
|
||||||
|
|
||||||
|
namespace session{
|
||||||
|
|
||||||
|
internal class Session{
|
||||||
|
|
||||||
|
// Create List of tuples(time, byte[])
|
||||||
|
// Where the tuple contains a time stamp for expiry and a ed25519 key
|
||||||
|
private List<(long, byte[])> ourPrivateKeys;
|
||||||
|
private List<(long, byte[])> theirPublicKeys;
|
||||||
|
|
||||||
|
private byte[] ourMasterPrivateKey;
|
||||||
|
private byte[] theirMasterPublicKey;
|
||||||
|
private bool strictMode;
|
||||||
|
private const int minimumKeyExpireSeconds = 60;
|
||||||
|
|
||||||
|
public Session(byte[] masterPrivate, byte[] masterPublic, bool strictMode){
|
||||||
|
if(masterPrivate.Length != 32 | masterPublic.Length != 32){throw new InvalidKeyLength();}
|
||||||
|
ourMasterPrivateKey = masterPrivate;
|
||||||
|
theirMasterPublicKey = masterPublic;
|
||||||
|
this.strictMode = strictMode;
|
||||||
|
ourPrivateKeys = new List<(long, byte[])>();
|
||||||
|
theirPublicKeys = new List<(long, byte[])>();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPublic(byte[] publicKey, long timestamp){
|
||||||
|
if (timestamp < DateTimeOffset.UtcNow.ToUnixTimeSeconds() + minimumKeyExpireSeconds){
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
theirPublicKeys.Add((timestamp, publicKey));
|
||||||
|
}
|
||||||
|
public byte[] getLatestPublicKey(){return theirPublicKeys[theirPublicKeys.Count - 1].Item2;}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -7,7 +7,7 @@ namespace keyring{
|
|||||||
|
|
||||||
public class KeyRing
|
public class KeyRing
|
||||||
{
|
{
|
||||||
private List<PublicIdentity> publicIdentities;
|
//private List<PublicIdentity> publicIdentities;
|
||||||
private List<PrivateIdentity> privateIdentities;
|
private List<PrivateIdentity> privateIdentities;
|
||||||
|
|
||||||
public KeyRing(){
|
public KeyRing(){
|
||||||
|
Loading…
Reference in New Issue
Block a user