Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
92d107a1
Commit
92d107a1
authored
Nov 11, 2015
by
Martin Storsjö
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
xtea: Add functions for little endian mode
Signed-off-by:
Martin Storsjö
<
martin@martin.st
>
parent
1fc94724
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
108 additions
and
14 deletions
+108
-14
APIchanges
doc/APIchanges
+3
-0
version.h
libavutil/version.h
+1
-1
xtea.c
libavutil/xtea.c
+81
-13
xtea.h
libavutil/xtea.h
+23
-0
No files found.
doc/APIchanges
View file @
92d107a1
...
...
@@ -12,6 +12,9 @@ libavutil: 2015-08-28
API changes, most recent first:
2015-11-xx - xxxxxxx - lavu 55.3.0 - xtea.h
Add av_xtea_le_init and av_xtea_le_crypt
2015-11-xx - xxxxxxx - lavfi 6.1.0 - avfilter.h
Add a frame_rate field to AVFilterLink
...
...
libavutil/version.h
View file @
92d107a1
...
...
@@ -54,7 +54,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 55
#define LIBAVUTIL_VERSION_MINOR
2
#define LIBAVUTIL_VERSION_MINOR
3
#define LIBAVUTIL_VERSION_MICRO 0
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
...
...
libavutil/xtea.c
View file @
92d107a1
...
...
@@ -53,6 +53,14 @@ void av_xtea_init(AVXTEA *ctx, const uint8_t key[16])
ctx
->
key
[
i
]
=
AV_RB32
(
key
+
(
i
<<
2
));
}
void
av_xtea_le_init
(
AVXTEA
*
ctx
,
const
uint8_t
key
[
16
])
{
int
i
;
for
(
i
=
0
;
i
<
4
;
i
++
)
ctx
->
key
[
i
]
=
AV_RL32
(
key
+
(
i
<<
2
));
}
static
void
xtea_crypt_ecb
(
AVXTEA
*
ctx
,
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
decrypt
,
uint8_t
*
iv
)
{
...
...
@@ -89,14 +97,51 @@ static void xtea_crypt_ecb(AVXTEA *ctx, uint8_t *dst, const uint8_t *src,
AV_WB32
(
dst
+
4
,
v1
);
}
void
av_xtea_crypt
(
AVXTEA
*
ctx
,
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
count
,
uint8_t
*
iv
,
int
decrypt
)
static
void
xtea_le_crypt_ecb
(
AVXTEA
*
ctx
,
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
decrypt
,
uint8_t
*
iv
)
{
uint32_t
v0
,
v1
;
int
i
;
v0
=
AV_RL32
(
src
);
v1
=
AV_RL32
(
src
+
4
);
if
(
decrypt
)
{
uint32_t
delta
=
0x9E3779B9
,
sum
=
delta
*
32
;
for
(
i
=
0
;
i
<
32
;
i
++
)
{
v1
-=
(((
v0
<<
4
)
^
(
v0
>>
5
))
+
v0
)
^
(
sum
+
ctx
->
key
[(
sum
>>
11
)
&
3
]);
sum
-=
delta
;
v0
-=
(((
v1
<<
4
)
^
(
v1
>>
5
))
+
v1
)
^
(
sum
+
ctx
->
key
[
sum
&
3
]);
}
if
(
iv
)
{
v0
^=
AV_RL32
(
iv
);
v1
^=
AV_RL32
(
iv
+
4
);
memcpy
(
iv
,
src
,
8
);
}
}
else
{
uint32_t
sum
=
0
,
delta
=
0x9E3779B9
;
for
(
i
=
0
;
i
<
32
;
i
++
)
{
v0
+=
(((
v1
<<
4
)
^
(
v1
>>
5
))
+
v1
)
^
(
sum
+
ctx
->
key
[
sum
&
3
]);
sum
+=
delta
;
v1
+=
(((
v0
<<
4
)
^
(
v0
>>
5
))
+
v0
)
^
(
sum
+
ctx
->
key
[(
sum
>>
11
)
&
3
]);
}
}
AV_WL32
(
dst
,
v0
);
AV_WL32
(
dst
+
4
,
v1
);
}
static
void
xtea_crypt
(
AVXTEA
*
ctx
,
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
count
,
uint8_t
*
iv
,
int
decrypt
,
void
(
*
crypt
)(
AVXTEA
*
,
uint8_t
*
,
const
uint8_t
*
,
int
,
uint8_t
*
))
{
int
i
;
if
(
decrypt
)
{
while
(
count
--
)
{
xtea_crypt_ecb
(
ctx
,
dst
,
src
,
decrypt
,
iv
);
crypt
(
ctx
,
dst
,
src
,
decrypt
,
iv
);
src
+=
8
;
dst
+=
8
;
...
...
@@ -106,10 +151,10 @@ void av_xtea_crypt(AVXTEA *ctx, uint8_t *dst, const uint8_t *src, int count,
if
(
iv
)
{
for
(
i
=
0
;
i
<
8
;
i
++
)
dst
[
i
]
=
src
[
i
]
^
iv
[
i
];
xtea_crypt_ecb
(
ctx
,
dst
,
dst
,
decrypt
,
NULL
);
crypt
(
ctx
,
dst
,
dst
,
decrypt
,
NULL
);
memcpy
(
iv
,
dst
,
8
);
}
else
{
xtea_crypt_ecb
(
ctx
,
dst
,
src
,
decrypt
,
NULL
);
crypt
(
ctx
,
dst
,
src
,
decrypt
,
NULL
);
}
src
+=
8
;
dst
+=
8
;
...
...
@@ -117,6 +162,18 @@ void av_xtea_crypt(AVXTEA *ctx, uint8_t *dst, const uint8_t *src, int count,
}
}
void
av_xtea_crypt
(
AVXTEA
*
ctx
,
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
count
,
uint8_t
*
iv
,
int
decrypt
)
{
xtea_crypt
(
ctx
,
dst
,
src
,
count
,
iv
,
decrypt
,
xtea_crypt_ecb
);
}
void
av_xtea_le_crypt
(
AVXTEA
*
ctx
,
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
count
,
uint8_t
*
iv
,
int
decrypt
)
{
xtea_crypt
(
ctx
,
dst
,
src
,
count
,
iv
,
decrypt
,
xtea_le_crypt_ecb
);
}
#ifdef TEST
#include <stdio.h>
...
...
@@ -157,9 +214,10 @@ static const uint8_t xtea_test_ct[XTEA_NUM_TESTS][8] = {
static
void
test_xtea
(
AVXTEA
*
ctx
,
uint8_t
*
dst
,
const
uint8_t
*
src
,
const
uint8_t
*
ref
,
int
len
,
uint8_t
*
iv
,
int
dir
,
const
char
*
test
)
const
char
*
test
,
void
(
*
crypt
)(
AVXTEA
*
,
uint8_t
*
,
const
uint8_t
*
,
int
,
uint8_t
*
,
int
))
{
av_xtea_
crypt
(
ctx
,
dst
,
src
,
len
,
iv
,
dir
);
crypt
(
ctx
,
dst
,
src
,
len
,
iv
,
dir
);
if
(
memcmp
(
dst
,
ref
,
8
*
len
))
{
int
i
;
printf
(
"%s failed
\n
got "
,
test
);
...
...
@@ -176,8 +234,8 @@ static void test_xtea(AVXTEA *ctx, uint8_t *dst, const uint8_t *src,
int
main
(
void
)
{
AVXTEA
ctx
;
uint8_t
buf
[
8
],
iv
[
8
];
int
i
;
uint8_t
buf
[
16
],
iv
[
8
];
int
i
,
j
;
const
uint8_t
src
[
32
]
=
"HelloWorldHelloWorldHelloWorld"
;
uint8_t
ct
[
32
];
uint8_t
pl
[
32
];
...
...
@@ -185,8 +243,18 @@ int main(void)
for
(
i
=
0
;
i
<
XTEA_NUM_TESTS
;
i
++
)
{
av_xtea_init
(
&
ctx
,
xtea_test_key
[
i
]);
test_xtea
(
&
ctx
,
buf
,
xtea_test_pt
[
i
],
xtea_test_ct
[
i
],
1
,
NULL
,
0
,
"encryption"
);
test_xtea
(
&
ctx
,
buf
,
xtea_test_ct
[
i
],
xtea_test_pt
[
i
],
1
,
NULL
,
1
,
"decryption"
);
test_xtea
(
&
ctx
,
buf
,
xtea_test_pt
[
i
],
xtea_test_ct
[
i
],
1
,
NULL
,
0
,
"encryption"
,
av_xtea_crypt
);
test_xtea
(
&
ctx
,
buf
,
xtea_test_ct
[
i
],
xtea_test_pt
[
i
],
1
,
NULL
,
1
,
"decryption"
,
av_xtea_crypt
);
for
(
j
=
0
;
j
<
4
;
j
++
)
AV_WL32
(
&
buf
[
4
*
j
],
AV_RB32
(
&
xtea_test_key
[
i
][
4
*
j
]));
av_xtea_le_init
(
&
ctx
,
buf
);
for
(
j
=
0
;
j
<
2
;
j
++
)
{
AV_WL32
(
&
ct
[
4
*
j
],
AV_RB32
(
&
xtea_test_ct
[
i
][
4
*
j
]));
AV_WL32
(
&
pl
[
4
*
j
],
AV_RB32
(
&
xtea_test_pt
[
i
][
4
*
j
]));
}
test_xtea
(
&
ctx
,
buf
,
pl
,
ct
,
1
,
NULL
,
0
,
"encryption"
,
av_xtea_le_crypt
);
test_xtea
(
&
ctx
,
buf
,
ct
,
pl
,
1
,
NULL
,
1
,
"decryption"
,
av_xtea_le_crypt
);
/* encrypt */
memcpy
(
iv
,
"HALLO123"
,
8
);
...
...
@@ -194,10 +262,10 @@ int main(void)
/* decrypt into pl */
memcpy
(
iv
,
"HALLO123"
,
8
);
test_xtea
(
&
ctx
,
pl
,
ct
,
src
,
4
,
iv
,
1
,
"CBC decryption"
);
test_xtea
(
&
ctx
,
pl
,
ct
,
src
,
4
,
iv
,
1
,
"CBC decryption"
,
av_xtea_crypt
);
memcpy
(
iv
,
"HALLO123"
,
8
);
test_xtea
(
&
ctx
,
ct
,
ct
,
src
,
4
,
iv
,
1
,
"CBC inplace decryption"
);
test_xtea
(
&
ctx
,
ct
,
ct
,
src
,
4
,
iv
,
1
,
"CBC inplace decryption"
,
av_xtea_crypt
);
}
printf
(
"Test encryption/decryption success.
\n
"
);
...
...
libavutil/xtea.h
View file @
92d107a1
...
...
@@ -54,6 +54,15 @@ AVXTEA *av_xtea_alloc(void);
*/
void
av_xtea_init
(
struct
AVXTEA
*
ctx
,
const
uint8_t
key
[
16
]);
/**
* Initialize an AVXTEA context.
*
* @param ctx an AVXTEA context
* @param key a key of 16 bytes used for encryption/decryption,
* interpreted as little endian 32 bit numbers
*/
void
av_xtea_le_init
(
struct
AVXTEA
*
ctx
,
const
uint8_t
key
[
16
]);
/**
* Encrypt or decrypt a buffer using a previously initialized context,
* in big endian format.
...
...
@@ -68,6 +77,20 @@ void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]);
void
av_xtea_crypt
(
struct
AVXTEA
*
ctx
,
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
count
,
uint8_t
*
iv
,
int
decrypt
);
/**
* Encrypt or decrypt a buffer using a previously initialized context,
* in little endian format.
*
* @param ctx an AVXTEA context
* @param dst destination array, can be equal to src
* @param src source array, can be equal to dst
* @param count number of 8 byte blocks
* @param iv initialization vector for CBC mode, if NULL then ECB will be used
* @param decrypt 0 for encryption, 1 for decryption
*/
void
av_xtea_le_crypt
(
struct
AVXTEA
*
ctx
,
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
count
,
uint8_t
*
iv
,
int
decrypt
);
/**
* @}
*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment