Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Security.Cryptography;
- using System.Diagnostics;
- using System;
- using System.Runtime.InteropServices.WindowsRuntime;
- namespace abc {
- public sealed class AesCtr {
- public static void testRun() {
- for (var i2 = 0; i2 < 3; i2++) {
- var outputV = Encrypt(new byte[32], new byte[16], new byte[30]);
- for (var i = 0; i < 30; i++) {
- Debug.WriteLine("runTest " + i.ToString() + " " + outputV[i].ToString());
- }
- }
- }
- public static byte[] Encrypt([ReadOnlyArray]byte[] psk, [ReadOnlyArray]byte[] iv, [ReadOnlyArray]byte[] inData) {
- var aesObj = Aes.Create();
- aesObj.Mode = CipherMode.ECB;
- aesObj.Padding = PaddingMode.None;
- var zeroIv = new byte[16];
- var Encryptor = aesObj.CreateEncryptor(psk, zeroIv);
- var counter = new byte[16]; // copy input iv (do not modify it)
- for (var i = 0; i < 16; i++) {
- counter[i] = iv[i];
- }
- var ctrOut = new byte[16];
- var output = new byte[inData.Length];
- var pos = 0;
- while (true) {
- if (pos >= inData.Length) {
- break;
- }
- Encryptor.TransformBlock(counter, 0, 16, ctrOut, 0);
- for (var i = 0; i < 16; i++) {
- if (pos >= inData.Length) {
- break;
- }
- output[pos] = (byte)(inData[pos] ^ ctrOut[i]);
- pos++;
- }
- // increment counter
- for (var i = 15; i >= 0; i--) {
- counter[i]++;
- if (counter[i] != 0) {
- break;
- }
- }
- }
- return output;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement