Skip to content

Commit 99791b9

Browse files
committed
Refactor multiple paddings support and other
1 parent c0a2e10 commit 99791b9

File tree

4 files changed

+20
-14
lines changed

4 files changed

+20
-14
lines changed

PaddingOracleDecryptor.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
using System;
22
using System.Text;
3-
using System.Reflection;
4-
using System.Security.Cryptography;
53

64
namespace Padding_Oracle_Attack
75
{
@@ -13,13 +11,9 @@ class PaddingOracleDecryptor
1311
public PaddingOracleDecryptor(RemoteServerMock oracle)
1412
{
1513
this.oracle = oracle;
16-
17-
PaddingMode paddingMode = oracle.Padding;
18-
// TODO: ugly, but works!
19-
paddingValueProvider = (int pos, int paddingLength, int blockLength) => (byte)(typeof(PaddingValueProviders).GetMethod(Enum.GetName(typeof(PaddingMode), paddingMode)).Invoke(null, new object[] { pos, paddingLength, blockLength }));
14+
paddingValueProvider = PaddingValueProviders.GetFromMode(oracle.Padding);
2015
}
2116

22-
2317
public string DecryptBlock(byte[] block, byte[] previousBlock)
2418
{
2519
byte[] decrypted = new byte[block.Length];

PaddingValueProviders.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,22 @@
1+
using System;
2+
using System.Security.Cryptography;
3+
14
namespace Padding_Oracle_Attack
25
{
36
public delegate byte PaddingValueProvider(int pos, int paddingLength, int blockLength);
47

58
class PaddingValueProviders
69
{
10+
public static PaddingValueProvider GetFromMode(PaddingMode paddingMode) {
11+
switch (paddingMode) {
12+
case PaddingMode.PKCS7:
13+
return PKCS7;
14+
case PaddingMode.ANSIX923:
15+
return ANSIX923;
16+
}
17+
throw new NotImplementedException(Enum.GetName(typeof(PaddingMode), paddingMode) + " is not supported.");
18+
}
19+
720
public static byte PKCS7(int pos, int paddingLength, int blockLength)
821
{
922
return (byte)paddingLength;

Program.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
using System.Security.Cryptography;
2-
using System.Net.Mime;
3-
using System.Linq;
1+
using System;
42
using System.Diagnostics;
5-
using System;
6-
using System.Text;
3+
using System.Security.Cryptography;
74
using Mono.Options;
85

96
namespace Padding_Oracle_Attack
107
{
118
class PaddingOracleAttack
129
{
13-
private static RemoteServerMock server = new RemoteServerMock(PaddingMode.PKCS7);
10+
// change the padding used by the oracle below (decryptor uses the same as the server/oracle)
11+
private const PaddingMode paddingMode = PaddingMode.PKCS7;
12+
private static RemoteServerMock server = new RemoteServerMock(paddingMode);
1413
private static PaddingOracleDecryptor decryptor = new PaddingOracleDecryptor(server);
1514

1615
public static void Main(String[] args)

RemoteServerMock.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using System.Threading;
21
using System.IO;
2+
using System.Threading;
33
using System.Security.Cryptography;
44

55
namespace Padding_Oracle_Attack

0 commit comments

Comments
 (0)