Workaround added for AMDGPU-Pro OpenCL runtime: AES encrypt and decrypt Invertkey function was calculated wrong in certain cases

This commit is contained in:
jsteube
2017-01-11 16:04:05 +01:00
parent bb5663e439
commit a1c13778c7
13 changed files with 22 additions and 14 deletions
+1 -1
View File
@@ -732,7 +732,7 @@ static void AES128_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES128_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 40; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 40; i < 20; i += 4, j -= 4)
{
u32 temp;
+1 -1
View File
@@ -759,7 +759,7 @@ static void AES256_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES256_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 56; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 56; i < 28; i += 4, j -= 4)
{
u32 temp;
+2 -2
View File
@@ -726,7 +726,7 @@ static void AES128_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES128_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 40; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 40; i < 20; i += 4, j -= 4)
{
u32 temp;
@@ -896,7 +896,7 @@ static void AES256_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES256_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 56; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 56; i < 28; i += 4, j -= 4)
{
u32 temp;
+2 -2
View File
@@ -729,7 +729,7 @@ static void AES128_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES128_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 40; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 40; i < 20; i += 4, j -= 4)
{
u32 temp;
@@ -967,7 +967,7 @@ static void AES256_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES256_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 56; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 56; i < 28; i += 4, j -= 4)
{
u32 temp;
+1 -1
View File
@@ -729,7 +729,7 @@ static void AES128_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES128_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 40; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 40; i < 20; i += 4, j -= 4)
{
u32 temp;
+1 -1
View File
@@ -753,7 +753,7 @@ static void AES256_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES256_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 56; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 56; i < 28; i += 4, j -= 4)
{
u32 temp;
+1 -1
View File
@@ -756,7 +756,7 @@ static void AES256_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES256_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 56; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 56; i < 28; i += 4, j -= 4)
{
u32 temp;
+1 -1
View File
@@ -759,7 +759,7 @@ static void AES256_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES256_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 56; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 56; i < 28; i += 4, j -= 4)
{
u32 temp;
+1 -1
View File
@@ -740,7 +740,7 @@ static void AES128_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES128_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 40; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 40; i < 20; i += 4, j -= 4)
{
u32 temp;
+1 -1
View File
@@ -759,7 +759,7 @@ static void AES256_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES256_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 56; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 56; i < 28; i += 4, j -= 4)
{
u32 temp;
+1 -1
View File
@@ -729,7 +729,7 @@ static void AES128_ExpandKey (u32 *userkey, u32 *rek, __local u32 *s_te0, __loca
static void AES128_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1, __local u32 *s_td2, __local u32 *s_td3, __local u32 *s_td4, __local u32 *s_te0, __local u32 *s_te1, __local u32 *s_te2, __local u32 *s_te3, __local u32 *s_te4)
{
for (u32 i = 0, j = 40; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 40; i < 20; i += 4, j -= 4)
{
u32 temp;
+1 -1
View File
@@ -748,7 +748,7 @@ static void AES256_InvertKey (u32 *rdk, __local u32 *s_td0, __local u32 *s_td1,
#ifdef _unroll
#pragma unroll
#endif
for (u32 i = 0, j = 56; i < j; i += 4, j -= 4)
for (u32 i = 0, j = 56; i < 28; i += 4, j -= 4)
{
u32 temp;
+8
View File
@@ -1,3 +1,11 @@
* changes v3.30 -> v3.xx:
##
## Workarounds
##
- Workaround added for AMDGPU-Pro OpenCL runtime: AES encrypt and decrypt Invertkey function was calculated wrong in certain cases
* changes v3.20 -> v3.30:
##