mirror of
https://github.com/Crypto-Notepad/Crypto-Notepad.git
synced 2026-03-11 08:55:25 +00:00
Cleaned up AESMetadata class code
This commit is contained in:
parent
31b7313322
commit
c155dc6d9c
1 changed files with 40 additions and 68 deletions
|
|
@ -3,6 +3,7 @@
|
|||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Crypto_Notepad
|
||||
{
|
||||
|
|
@ -14,87 +15,58 @@ class AESMetadata
|
|||
/// <summary>
|
||||
/// Offset to actual AES data; size of metadata
|
||||
/// </summary>
|
||||
private int _offsetToData;
|
||||
public int offsetToData
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._offsetToData;
|
||||
}
|
||||
}
|
||||
private byte[] _initialVector;
|
||||
public byte[] initialVector
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._initialVector;
|
||||
}
|
||||
}
|
||||
private byte[] _salt;
|
||||
public byte[] salt
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._salt;
|
||||
}
|
||||
}
|
||||
public int OffsetToData { get; private set; }
|
||||
public byte[] InitialVector { get; private set; }
|
||||
public byte[] Salt { get; private set; }
|
||||
|
||||
public AESMetadata()
|
||||
{
|
||||
this._initialVector = new byte[16];
|
||||
this._salt = null;
|
||||
this.InitialVector = new byte[16];
|
||||
this.Salt = null;
|
||||
}
|
||||
|
||||
public void DeleteMetadataFromBuffer(ref byte[] rawData)
|
||||
{
|
||||
// Possibly unsafe
|
||||
byte[] buffer = new byte[rawData.Length - this.offsetToData];
|
||||
System.Buffer.BlockCopy(rawData, this.offsetToData, buffer, 0, rawData.Length - this.offsetToData);
|
||||
byte[] buffer = new byte[rawData.Length - this.OffsetToData];
|
||||
System.Buffer.BlockCopy(rawData, this.OffsetToData, buffer, 0, rawData.Length - this.OffsetToData);
|
||||
rawData = buffer;
|
||||
}
|
||||
|
||||
private bool ReadData(byte[] rawData, int offset, ref byte[] dataOut)
|
||||
{
|
||||
// Buffer to store bytes
|
||||
List<byte> buffer = new List<byte>();
|
||||
const byte nullTerminator = 0;
|
||||
bool foundData = false;
|
||||
|
||||
// Push data to buffer
|
||||
for (int i = offset; i < rawData.Length; i++) {
|
||||
if (rawData[i] == nullTerminator) { foundData = true; break; }
|
||||
else { buffer.Add(rawData[i]); }
|
||||
}
|
||||
|
||||
if (foundData == true)
|
||||
{
|
||||
dataOut = buffer.ToArray();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool GetMetadata(byte[] rawData)
|
||||
{
|
||||
int index = 0;
|
||||
bool result = false;
|
||||
// Read initialVector
|
||||
for (int i = 0;
|
||||
index < rawData.Length;
|
||||
index++, i++)
|
||||
{
|
||||
if (rawData[index] == '\0') // Null terminator
|
||||
{
|
||||
result = true;
|
||||
index++;
|
||||
break;
|
||||
}
|
||||
if (index < this.initialVector.Length)
|
||||
this.initialVector[i] = rawData[index];
|
||||
else
|
||||
break;
|
||||
}
|
||||
int offset = 0;
|
||||
byte[] buffer = null;
|
||||
|
||||
if (!result) return false;
|
||||
if (!this.ReadData(rawData, 0, ref buffer)) { return false; }
|
||||
this.InitialVector = buffer;
|
||||
offset += buffer.Length + 1;
|
||||
|
||||
// This is kind of a dirty fix, but it gets the job done
|
||||
// Get length of salt
|
||||
int length = 0;
|
||||
for (int i = index;
|
||||
i < rawData.Length;
|
||||
i++)
|
||||
{
|
||||
if (rawData[i] == '\0') // Null terminator
|
||||
{
|
||||
index++;
|
||||
break;
|
||||
}
|
||||
length++;
|
||||
}
|
||||
// Copy bytes into this.salt
|
||||
this._salt = new byte[length];
|
||||
System.Buffer.BlockCopy(rawData, index - 1, this.salt, 0, length);
|
||||
if (!this.ReadData(rawData, offset, ref buffer)) { return false; }
|
||||
this.Salt = buffer;
|
||||
offset += buffer.Length + 1;
|
||||
|
||||
this._offsetToData = this.salt.Length + 1 + this.initialVector.Length + 1;
|
||||
this.OffsetToData = offset;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -198,8 +170,8 @@ public static string Decrypt(string cipherText, string password, string salt = "
|
|||
}
|
||||
else
|
||||
{
|
||||
saltValueBytes = metadata.salt;
|
||||
initialVectorBytes = metadata.initialVector;
|
||||
saltValueBytes = metadata.Salt;
|
||||
initialVectorBytes = metadata.InitialVector;
|
||||
metadata.DeleteMetadataFromBuffer(ref cipherTextBytes);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue