I am trying to se if I can use XXTEA in my application.
The code that I found on Wikipedia code is only for encryption and there is no code for decryption.
How can I decrypt with XXTEA?
I am developing c++ in windows (visual studio 2012)
The code snippet in the article apparently uses negative values of n to mean decoding.
#include <stdio.h>
#include <stdint.h>
void btea(uint32_t *v, int n, uint32_t const key[4]); /* ... */
int main(void) {
char s[128] = "hello world bla bla bla bla bla bla";
uint32_t key[4] = {1,2,3,4};
int n = 128 / sizeof(uint32_t);
printf("%s\n",s);
btea((uint32_t*)s, n, key);
printf("%s\n",s);
btea((uint32_t*)s, -n, key);
printf("%s\n",s);
}
prints:
$ ./a.out | hexdump -C
00000000 68 65 6c 6c 6f 20 77 6f 72 6c 64 20 62 6c 61 20 |hello world bla |
00000010 62 6c 61 20 62 6c 61 20 62 6c 61 20 62 6c 61 20 |bla bla bla bla |
00000020 62 6c 61 0a 2f 44 86 75 d5 16 83 bd 5d 20 af f3 |bla./D.u....] ..|
00000030 a7 dd bf 9f 3a cd a0 13 ef 2b 89 48 2e f6 89 20 |....:....+.H... |
00000040 e2 ba e4 9f ed 38 d1 86 43 82 9e a6 47 6c e4 6d |.....8..C...Gl.m|
00000050 a8 82 22 9e cb 5b d1 a1 18 14 ef 18 ca 23 26 cc |.."..[.......#&.|
00000060 18 1d 4f ba 1b d5 f5 d0 45 72 1c 69 b9 22 a3 08 |..O.....Er.i."..|
00000070 44 71 1f 3b 8f a9 9d 5b 14 93 7b 59 b4 6b e8 1b |Dq.;...[..{Y.k..|
00000080 18 97 1b 74 61 d6 e9 e9 60 96 8e 4c 26 be 21 fc |...ta...`..L&.!.|
00000090 75 9f 4a 18 67 46 f0 95 2b ca 90 d9 f4 ce 3f 2f |u.J.gF..+.....?/|
000000a0 44 82 56 44 c0 0a 39 57 ff 7f 0a 68 65 6c 6c 6f |D.VD..9W...hello|
000000b0 20 77 6f 72 6c 64 20 62 6c 61 20 62 6c 61 20 62 | world bla bla b|
000000c0 6c 61 20 62 6c 61 20 62 6c 61 20 62 6c 61 0a |la bla bla bla.|
000000cf
Related
I have an array of bytes, they are a raw PNG file that was originally a base64 encoded string.
The encoded string:
stEncodedQR = "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";
The raw bytes:
(src\funcs.cpp:1064) DecodedQRPicture ptr:0x19E51C0 size:0x673
(:0) ---- ----------------------------------------------- ----------------
(:0) 000| 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 .PNG........IHDR
(:0) 010| 00 00 01 40 00 00 01 40 01 00 00 00 00 E5 EB 98 ...#...#.....ek.
(:0) 020| 07 00 00 06 3A 49 44 41 54 78 DA ED 9A 31 8E AB ....:IDATxZm.1.+
(:0) 030| 4A 10 45 0B 11 90 D9 1B 40 EA 6D 90 F5 96 F0 06 J.E...Y.#jm.u.p.
(:0) 040| 30 6C 00 6F 89 8C 6D 20 B1 01 C8 08 10 F5 CF 65 0l.o..m 1.H..uOe
(:0) 050| 22 7B 9E F4 7F 40 BF E0 CB D6 48 A3 B1 0F A3 56 "{.t.#?`KVH#1.#V
(:0) 060| 77 D5 AD 5B D5 36 FF 8F 2F FB 82 5F F0 0B 7E C1 wU-[U6../{._p.~A
(:0) 070| 2F F8 05 FF CF E0 62 F6 F4 79 29 CA C7 30 3D 3C /x..O`bvty)JG0=<
(:0) 080| 1C E6 47 0C FC 59 C7 DD 2C 24 05 57 DF 1F 63 E8 .fG.|YG],$.W_.ch
(:0) 090| DC BB 21 F7 2D 7F 6D 61 1D ED 31 4E CF B1 7C 7A \;!w-.ma.m1NO1|z
(:0) 0A0| 62 70 28 1B 9B 5B 0B EB B6 5B B1 3F 60 B5 F0 F2 bp(..[.k6[1?`5pr
(:0) 0B0| E1 65 5D 24 07 EB 68 F7 31 6F A3 F7 85 DD 8A FD ae]$.khw1o#w.].}
(:0) 0C0| BE 4D 75 51 DE FF 0A D8 14 B9 FB 5E 9B DD DD 7B >MuQ^..X.9{^.]]{
(:0) 0D0| E3 C5 A3 41 FF 20 35 C8 C9 0C 1C 0B 11 61 6C CF cE#A. 5HI....alO
(:0) 0E0| 73 9B 9E 83 82 82 C5 FE 3E C2 6B 41 E2 F1 31 96 s.....E~>BkAbq1.
(:0) 0F0| 7F FC F9 15 B8 17 83 BC 8E 6A 7E 8D 65 E6 F9 51 .|y.8..<.j~.efyQ
(:0) 100| F1 90 3D 87 7C 89 F3 9F D2 F5 62 90 D0 B3 6A EE q.=.|.s.Rub.P3jn
(:0) 110| DC 6A 0B E0 8D 4D 66 F9 3A 2A 33 FA 2A 31 18 E7 \j.`.Mfy:*3z*1.g
(:0) 120| A3 28 9F 23 41 31 1F 55 DE 8D D3 7D B0 A6 DA 33 #(.#A1.U^.S}0&Z3
(:0) 130| AD 3A 2D C8 6F A2 6F A9 90 9C FD 3E 5A 23 9C A0 -:-Ho"o)..}>Z#.
(:0) 140| D8 EB 6A EE 63 5A F0 E0 E4 CF 14 6C 2B 42 72 BF XkjncZp`dO.l+Br?
(:0) 150| 45 AB 15 8C 73 B7 B1 6D 21 29 B8 54 65 36 70 26 E+..s71m!)8Te6p&
(:0) 160| 46 DE DF F4 D0 DE 54 08 1E E9 38 2F 96 16 3C 8A F^_tP^T..i8/..<.
(:0) 170| BC 1B 50 9A D0 16 53 C3 7E 0C AC 2E B4 91 B3 B2 <.P.P.SC~.,.4.32
(:0) 180| 6C 4C 0C 1A 22 47 08 A0 7C BE 14 D3 7D 0B 3E D8 lL.."G. |>.S}.>X
(:0) 190| 73 2B 6F 31 6F CD 13 83 FA E9 46 36 A3 BC 0F 88 s+o1oM..ziF6#<..
(:0) 1A0| EE CF 26 CD AB 97 D9 16 92 82 0B B1 B0 51 E2 CC nO&M+.Y....10QbL
(:0) 1B0| 2A 43 7A D1 00 4E A6 2E F2 B6 40 0C 3C 2D 68 64 *CzQ.N&.r6#.<-hd
(:0) 1C0| 7F 78 6D B3 2B FF A8 F0 96 E9 CD 3D 43 6E 87 90 .xm3+.(p.iM=Cn..
(:0) 1D0| 14 E4 F7 8D E5 0C 94 97 F9 88 14 76 D3 02 8D 37 .dw.e...y..vS..7
(:0) 1E0| BD FB 14 80 8B C1 15 2B E1 EC 90 AF 04 42 25 15 ={...A.+al./.B%.
(:0) 1F0| CC C6 A9 B6 29 DB A6 F7 2C BC 1E F4 01 1F E1 AF LF)6)[&w,<.t..a/
(:0) 200| 21 3F A2 DD 0C ED E1 AC 76 72 02 B9 5D B7 B4 20 !?"].ma,vr.9]74
(:0) 210| C1 F8 F2 D2 0A EF 23 8B 9A 5B 8A 3C 92 2F C1 9B AxrR.o#..[.<./A.
(:0) 220| 78 33 29 B8 C4 09 E7 42 55 6F A8 E4 83 52 DF AA x3)8D.gBUo(d.R_*
(:0) 230| 7C 75 FC 45 38 52 83 C6 EA F2 C3 10 9B E9 56 4D |u|E8R.FjrC..iVM
(:0) 240| C4 42 6F DE A2 B8 3C F4 AE B8 97 83 18 D5 CC 31 DBo^"8<t.8...UL1
(:0) 250| AA 67 0C 56 E5 03 17 89 CB F0 BC 8F 96 6D 9E 14 *g.Ve...Kp<..m..
(:0) 260| 3C 8A 70 6E 86 76 E8 EE B2 70 4F 14 28 52 D8 79 <.pn.vhn2pO.(RXy
(:0) 270| 3F 24 05 DD 65 9A B2 91 92 1E 7A BC 33 69 31 90 ?$.]e.2...z<3i1.
(:0) 280| 88 53 1D CB 77 ED B9 1E 5C 87 9F 35 92 EE 2A EF .S.Kwm9.\..5.n*o
(:0) 290| 2B 4A CF 56 E9 4C C2 12 43 52 10 89 B5 78 2A AE +JOViLB.CR..5x*.
(:0) 2A0| F4 06 0D E0 64 F0 D1 25 19 69 A9 41 FB 49 F4 D0 t..`dpQ%.i)A{ItP
(:0) 2B0| 4A 65 A9 36 BB 92 80 DA CE DE 0C 9E 18 44 E4 64 Je)6;..ZN^...Ddd
(:0) 2C0| 1B 1F F8 88 28 6B F3 1A 26 1C DC AD C0 C0 A6 05 ..x.(ks.&.\-##&.
(:0) 2D0| D7 8D CE 8C FA 06 5B 5A CC 17 19 67 CE 84 D0 50 W.N.z.[ZL..gN.PP
(:0) 2E0| 6F 9A 14 3C 0A AB 2B 95 1A E5 E2 40 9B 22 0D 6E o..<.++..eb#.".n
(:0) 2F0| 0A 79 E7 A5 48 0B BA D3 83 86 D3 41 60 61 E6 36 .yg%H.:S..SA`af6
(:0) 300| 92 FD A1 AF C2 CB 65 DB 93 82 EB 66 34 61 34 67 .}!/BKe[..kf4a4g
(:0) 310| D9 A0 2D 59 C7 FD 3E 90 7F AA F0 0F 4F 0D 22 78 Y -YG}>..*p.O."x
(:0) 320| D2 75 56 67 67 16 D2 8B F7 71 47 F3 96 2A 2D 78 RuVgg.R.wqGs.*-x
(:0) 330| BA 18 AC AB 4E A6 A1 21 DE A8 36 38 29 1A 85 F0 :.,+N&!!^(68)..p
(:0) 340| 61 3E 2E 07 69 4A 5E 58 F5 02 5B 41 16 12 08 F8 a>..iJ^Xu.[A...x
(:0) 350| 38 82 02 1B 95 77 EF D2 7C 39 28 D7 46 E7 AD B2 8....woR|9(WFg-2
(:0) 360| 46 49 9F 5F 3E F3 5C 4D 72 14 A1 7B F7 8F 97 83 FI._>s\Mr.!{w...
(:0) 370| 2E 9F 4E 5C 94 8F B3 1D 6C 6C AF D5 2D ED 19 59 ..N\..3.ll/U-m.Y
(:0) 380| 58 A5 05 0F 4C 84 4D 4F 89 3D D9 80 A1 9B D1 1E X%..L.MO.=Y.!.Q.
(:0) 390| 7A 14 2B 76 8B 69 41 B4 87 D3 E8 25 00 6A 43 51 z.+v.iA4.Sh%.jCQ
(:0) 3A0| 41 3C 1D 11 F1 C2 D2 56 21 31 A8 0E 58 93 AD E2 A<..qBRV!1(.X.-b
(:0) 3B0| 74 EE 84 E7 98 2F 9A FD 4C D9 67 BA 5E 0C EA F3 tn.g./.}LYg:^.js
(:0) 3C0| 4D A7 E1 43 D9 60 DF C6 FC 28 E4 9A 79 BA 7F B7 M'aCY`_F|(d.y:.7
(:0) 3D0| 5C 97 83 72 CD 8E DE E4 CE AE 98 3C BB 56 8D 8D \..rM.^dN..<;V..
(:0) 3E0| D5 50 33 2D B8 A2 AC 83 86 97 6D E4 89 5C E1 2F UP3-8",...md.\a/
(:0) 3F0| E9 DD B1 93 1F 4D C5 E5 E0 A1 FA E6 64 1E 85 85 i]1..MEe`!zfd...
(:0) 400| 8D B9 69 7C 4B 3F 4A 72 F0 81 27 05 D7 91 22 33 .9i|K?Jrp.'.W."3
(:0) 410| 77 23 D2 4E 81 25 F3 24 7B D9 28 A3 B1 7C B8 E6 w#RN.%s${Y(#1|8f
(:0) 420| CB 41 2F 51 1A 04 1E F6 56 E5 3D A9 30 CE 2C F6 KA/Q...vVe=)0N,v
(:0) 430| 3E 96 75 62 D0 A5 79 41 73 4D D7 58 EB 9C 78 95 >.ubP%yAsMWXk.x.
(:0) 440| 52 DC D3 4E 26 06 39 19 F2 DE 6A 4C 04 6B AC 88 R\SN&.9.r^jL.k,.
(:0) 450| 44 4E C9 CE CA 13 92 82 C8 FC 3A 6A BE 25 ED D1 DNINJ...H|:j>%mQ
(:0) 460| 5C 8D EE 44 9E 82 26 69 FD 98 68 5E 0D 3A E1 A0 \.nD..&i}.h^.:a
(:0) 470| D9 03 45 46 16 E6 A8 66 57 AF 80 E2 FA FB BC E7 Y.EF.f(fW/.bz{<g
(:0) 480| 7A F0 50 29 9B A5 F4 63 79 97 97 44 8D C2 61 41 zpP).%tcy..D.BaA
(:0) 490| B3 AE 2A 2D E8 2A 29 B2 C9 28 3D 6E AE 93 A7 43 3.*-h*)2I(=n..'C
(:0) 4A0| 12 C8 48 0C 5D 5A 70 A1 DB DE 66 3E E9 39 8A CD .HH.]Zp![^f>i9.M
(:0) 4B0| EE 72 52 B2 6F AB C4 3E A4 05 23 91 48 6B 22 17 nrR2o+D>$.#.Hk".
(:0) 4C0| 49 A1 D3 1C D7 D4 25 60 A3 DA 22 2D 88 6B 5E AA I!S.WT%`#Z"-.k^*
(:0) 4D0| B3 2F 89 14 9C BC 1B 66 C2 B3 31 55 D7 F7 89 E6 3/...<.fB31UWw.f
(:0) 4E0| F5 E0 A2 FC 43 D7 95 0D 84 A1 8A DB 59 6A D4 30 u`"|CW...!.[YjT0
(:0) 4F0| 7D 4C 3E 2E 07 89 47 DF 9B 6A 6A A2 2E 6A 5E AE }L>...G_.jj".j^.
(:0) 500| FB A8 FB 38 53 6D 2C A6 05 71 CD D4 93 D6 66 17 {({8Sm,&.qMT.Vf.
(:0) 510| 82 73 9F CF 0E 89 0E D5 DB C4 E0 21 B9 3D 6F 20 .s.O...U[D`!9=o
(:0) 520| C7 DD 2A 45 25 E6 11 23 F9 18 7F 35 E2 57 83 4B G]*E%f.#y..5bW.K
(:0) 530| C4 B4 6A 66 5F C7 FC 1C 6B B1 64 82 62 6A 64 AC D4jf_G|.k1d.bjd,
(:0) 540| 3C 29 88 7F EC 0B DD 0E 51 57 EF 83 8C 55 2F C9 <)..l.].QWo..U/I
(:0) 550| A7 EC E0 6A 13 83 BA FD 23 E7 D0 78 D6 58 AA 29 'l`j..:}#gPxVX*)
(:0) 560| 94 E2 6A F6 F3 31 60 4B 00 E6 6D 35 F7 72 AF 14 .bjvs1`K.fm5wr/.
(:0) 570| F3 F3 86 6A D3 0D E4 13 57 B5 A5 05 35 BE 8D AA ss.jS.d.W5%.5>.*
(:0) 580| 2D 78 A8 26 DA 39 D8 23 46 E6 25 CE 1F 23 92 CB -x(&Z9X#Ff%N.#.K
(:0) 590| 41 BC 43 87 E2 6E 08 8F 86 6A BA 9D 38 A7 D7 9A A<C.bn...j:.8'W.
(:0) 5A0| 7C BC DB 99 CB 41 8D 51 9D ED D1 0D 24 6D E8 8B |<[.KA.Q.mQ.$mh.
(:0) 5B0| 84 C0 48 46 B6 0A D9 F3 A4 E0 8F F2 FD C4 45 A3 .#HF6.Ys$`.r}DE#
(:0) 5C0| AF 33 D0 99 FD 74 FF BF 26 9A 57 83 BA 6D F6 89 /3P.}t.?&.W.:mv.
(:0) 5D0| A6 1F 0F AB 9B CF 8D 8D 91 A7 63 AB 6A F3 A4 20 &..+.O...'c+js$
(:0) 5E0| EF 3D 37 3B BF 52 A1 AF 51 DC CE 39 6E 37 68 1C o=7;?R!/Q\N9n7h.
(:0) 5F0| F2 E9 9A 2F 07 95 76 34 46 F2 8F 7D 85 B3 90 79 ri./..v4Fr.}.3.y
(:0) 600| 7C 8E A8 82 7A 88 E4 E0 39 6D D2 2D 8D 5A 13 96 |.(.z.d`9mR-.Z..
(:0) 610| B6 DF 4C F3 9E 6E FB 0B A0 AE BB 5B DB 6B 09 7F 6_Ls.n{. .;[[k..
(:0) 620| EE E7 AC EB 16 D3 83 6A FD 71 2E FB 7D 0B BA 83 ng,k.S.j}q.{}.:.
(:0) 630| DD D4 89 A2 3A 1C CE 2B 31 78 7A 0A 8A 8C DD CC ]T.":.N+1xz...]L
(:0) 640| CF CE 7B 7E 0D 54 DA BC FB 75 35 74 39 F8 FD 76 ON{~.TZ<{u5t9x}v
(:0) 650| D8 17 FC 82 5F F0 0B 7E C1 2F F8 AF AF 7F 00 2C X.|._p.~A/x//..,
(:0) 660| B0 6E EF BE 03 93 F3 00 00 00 00 49 45 4E 44 AE 0no>..s....IEND.
(:0) 670| 42 60 82 B`.
But when I try to write a file.png with the raw bytes, it doesn't write anything and the created png is blank. Any ideas how can I work around this?
size_t szDecodedLength = 0;
unsigned char * stDecodedQR = base64_decode(encodedPictureBase64,inLenEncodedPicture, &szDecodedLength);
ofstream outPicture("./flash/file.png", std::ios::out | std::ios::binary | std::ios::trunc);
string outString(reinterpret_cast<char*>(stDecodedQR), szDecodedLength);
if( outPicture && !outPicture.is_open() ){
return;
}
outPicture.write( reinterpret_cast<char*> (stDecodedQR), szDecodedLength);
// outPicture << outString; I've also tried creating a string and doing this but result is the same.
outPicture.flush();
outPicture.close();
This code solves the issue, it looks like it might be permission on the device I'm working on. Tested below code in Visual Studio with C++ and it generates the wanted file(picture) correctly, is a QR code that I can scan with my smartphone.
size_t szDecodedLength = 0;
unsigned char* stDecodedQR = base64_decode(encodedPictureBase64, inLenEncodedPicture, &szDecodedLength);
const size_t szArr = szDecodedLength;
std::vector<unsigned char> vDecodedQR;
for (auto i = 0; i < szDecodedLength; i++) {
vDecodedQR.push_back(stDecodedQR[i]);
}
std::ofstream outPicture("mypng.png", std::ios::out | std::ios::binary | std::ios::trunc);
if (outPicture && !outPicture.is_open()) {
std::cerr << " Error creating PNG file" << std::endl;
return;
}
outPicture.write(reinterpret_cast<char*> (stDecodedQR), szDecodedLength);
outPicture.close();
I'm trying to sign a file with my private key using the following function:
void Signer::SignFile(const std::string& file)
{
RSASS<PSSR, Whirlpool>::Signer signer(rsaPrivate);
// Encrypt and write
FileSource ss1(file.c_str(), true,
new SignerFilter(rng, signer,
new FileSink(file.c_str(), true)
, true));
}
As an outcome my target file gets overwritten with the signature. Why does that happen? Obviously I'd like to append it to the file, that's why I also added an extra "true" parameter for the "putMessage".
FileSource ss1(file.c_str(), true,
new SignerFilter(rng, signer,
new FileSink(file.c_str(), true), true));
I [personally] have never seen someone use the same file as a source and sink. Usually the file data and signature are separate like with a detached signature.
It looks like one file/two streams is implementation defined: C++ read and write to same file using different streams. I guess you should expect seemingly random results on different platforms.
As an outcome my target file gets overwritten with the signature. Why does that happen?
The FileSink opens with std::ios_base::tunc. Also see FileSink on the Crypto++ wiki.
You should probably do something like this. It saves the signature to an intermediate ByteQueue, and then writes the queue to the file once the file is closed.
#include "cryptlib.h"
#include "filters.h"
#include "osrng.h"
#include "files.h"
#include "pssr.h"
#include "rsa.h"
#include "whrlpool.h"
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char* argv[])
{
using namespace CryptoPP;
AutoSeededRandomPool prng;
std::string fname("test.bin");
///// Create test message /////
{
std::string msg("Yoda said, Do or do not. There is no try.");
std::ofstream out(fname.c_str());
out.write(msg.data(), msg.size());
}
///// Generate a key /////
RSASS<PSSR, Whirlpool>::Signer signer;
signer.AccessKey().GenerateRandomWithKeySize(prng, 2048);
///// Sign the message /////
ByteQueue queue;
{
FileSource source(fname.c_str(), true,
new SignerFilter(prng, signer,
new Redirector(queue)));
}
///// Append the signature /////
{
std::ofstream out(fname.c_str(), std::ios_base::out | std::ios_base::binary | std::ios_base::app);
queue.TransferTo(FileSink(out).Ref());
}
///// Create a verifier /////
RSASS<PSSR, Whirlpool>::Verifier verifier(signer);
///// Verify the message /////
{
FileSource source(fname.c_str(), true,
new SignatureVerificationFilter(verifier, NULLPTR,
SignatureVerificationFilter::THROW_EXCEPTION));
}
std::cout << "Verified signature on message" << std::endl;
return 0;
}
It does not crash and it appends the message as expected:
$ ./test.exe
Verified signature on message
$ hexdump -C test.bin
00000000 59 6f 64 61 20 73 61 69 64 2c 20 44 6f 20 6f 72 |Yoda said, Do or|
00000010 20 64 6f 20 6e 6f 74 2e 20 54 68 65 72 65 20 69 | do not. There i|
00000020 73 20 6e 6f 20 74 72 79 2e 19 f2 1c 8f f9 cb 2f |s no try......./|
00000030 f2 38 9f a8 3b a9 0b 8b 62 25 56 a8 ea 81 7e 60 |.8..;...b%V...~`|
00000040 22 55 38 ce 79 7f 32 95 a5 1a 75 c1 80 ad b2 c2 |"U8.y.2...u.....|
00000050 6f ce a5 f7 bd 4b d3 3f e4 b3 69 00 21 60 d7 09 |o....K.?..i.!`..|
00000060 a8 71 9b 5f 41 d6 66 b1 80 f1 de 00 26 19 34 01 |.q._A.f.....&.4.|
00000070 b3 65 1b 78 e2 32 71 be bc 07 25 78 36 6b 56 4e |.e.x.2q...%x6kVN|
00000080 26 4e 12 9e a8 bb 72 86 ee 0d 70 b2 f1 bd a3 2c |&N....r...p....,|
00000090 14 fd 12 61 35 98 4a 80 9f ee 3c 31 d3 70 26 0f |...a5.J...<1.p&.|
000000a0 73 a0 5d 36 ef 96 56 65 f8 ac 3a fb 44 c3 04 76 |s.]6..Ve..:.D..v|
000000b0 e5 2f ae 92 84 be 40 34 f6 4b b8 84 aa bd 67 74 |./....#4.K....gt|
000000c0 05 43 91 d2 e6 b1 50 dd 6d 64 47 cc 3e 3c 3a 9d |.C....P.mdG.><:.|
000000d0 67 ff 4f 38 c1 a5 a6 d5 92 45 bc 2d ff 96 30 3a |g.O8.....E.-..0:|
000000e0 1d 3a 42 4f 8c 13 2d 4c 3f e9 ad 08 a6 b3 5e fa |.:BO..-L?.....^.|
000000f0 46 08 24 17 43 ce ed ec f7 1a 38 62 e7 bf 42 93 |F.$.C.....8b..B.|
00000100 84 44 b6 05 22 9e e3 bd 80 a6 08 b0 34 d0 a4 89 |.D..".......4...|
00000110 78 48 20 7f 7b 33 1c 51 9d 48 b5 b7 f7 de 2f dd |xH .{3.Q.H..../.|
00000120 d7 74 7b af 04 cd 92 fc 1c |.t{......|
I was not able to get this to work. I'm pretty sure it is a dead end.
std::fstream inout(fname.c_str(), std::ios_base::in | std::ios_base::out | std::ios_base::binary | std::ios_base::app);
FileSource fs(inout, true,
new SignerFilter(prng, signer,
new FileSink(inout), true));
Obviously I'd like to append it to the file, that's why ...
Also, because you are using PSSR, you don't need the original message. PSSR is "probabilistic signature scheme with recovery". The message is include in the signature with a mask function.
You would need the original message with a SSA scheme. SSA is "signature scheme with appendix". In a SSA scheme you need to provide both the original message and the signature.
(From the comments) Here is an example that uses a Signature Scheme with Appendix (SSA). It also uses std::iftream and std::ofstream directly so FileSource and FileSink work as you expect. std::ofstream includes std::ios_base::app so the signature is appended.
#include "cryptlib.h"
#include "filters.h"
#include "osrng.h"
#include "files.h"
#include "oaep.h"
#include "rsa.h"
#include "sha.h"
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char* argv[])
{
using namespace CryptoPP;
AutoSeededRandomPool prng;
std::string fname("test.bin");
///// Create test message /////
{
std::string msg("Yoda said, Do or do not. There is no try.");
std::ofstream out(fname.c_str());
out.write(msg.data(), msg.size());
}
///// Generate a key /////
RSASS<PKCS1v15, SHA256>::Signer signer;
signer.AccessKey().GenerateRandomWithKeySize(prng, 2048);
{
///// Create fstreams for input and output /////
std::ifstream fin(fname.c_str(), std::ios_base::in | std::ios_base::binary);
std::ofstream fout(fname.c_str(), std::ios_base::out | std::ios_base::binary | std::ios_base::app);
///// Sign the message /////
FileSource source(fin, true,
new SignerFilter(prng, signer,
new FileSink(fout)));
}
///// Create a verifier /////
RSASS<PKCS1v15, SHA256>::Verifier verifier(signer);
///// Verify the message /////
{
FileSource source(fname.c_str(), true,
new SignatureVerificationFilter(verifier, NULLPTR,
SignatureVerificationFilter::THROW_EXCEPTION));
}
std::cout << "Verified signature on message" << std::endl;
return 0;
}
And then:
$ ./test.exe
Verified signature on message
$ hexdump -C test.bin
00000000 59 6f 64 61 20 73 61 69 64 2c 20 44 6f 20 6f 72 |Yoda said, Do or|
00000010 20 64 6f 20 6e 6f 74 2e 20 54 68 65 72 65 20 69 | do not. There i|
00000020 73 20 6e 6f 20 74 72 79 2e c7 b3 6f 84 1d fd bf |s no try...o....|
00000030 c7 c8 38 7c 89 b1 f3 42 ee 5e f8 10 de a8 01 7f |..8|...B.^......|
00000040 7f a5 24 3d 27 7e 55 16 bc 80 8b 21 21 75 3d ed |..$='~U....!!u=.|
00000050 41 05 84 b1 3d bf d3 ae 3a 2f a8 81 7a e7 e4 ae |A...=...:/..z...|
00000060 50 d7 9b 25 04 17 a6 a3 1d 12 e2 8e cd 7a 02 42 |P..%.........z.B|
00000070 91 c0 d7 fc 43 09 94 a2 66 d9 67 95 55 5e dc 8c |....C...f.g.U^..|
00000080 eb bc 20 af e8 5c d4 63 05 d4 2c 48 57 6d f1 fe |.. ..\.c..,HWm..|
00000090 26 16 80 c3 41 11 58 8e 8d b0 cb 48 95 b9 ed 94 |&...A.X....H....|
000000a0 84 cc 86 0f a4 7e a3 6a ff 0d 0d 24 17 82 13 94 |.....~.j...$....|
000000b0 54 cb 8a ca 04 1e 65 18 c3 ab a2 3f 4d 44 de 42 |T.....e....?MD.B|
000000c0 32 07 29 e4 95 83 cc ff 39 85 08 bf d5 61 46 db |2.).....9....aF.|
000000d0 e0 96 d6 69 25 b9 ce 1e 3e bc 63 81 e5 16 bd 12 |...i%...>.c.....|
000000e0 a0 78 02 19 60 96 80 36 7d a5 79 be 0f 45 54 f4 |.x..`..6}.y..ET.|
000000f0 92 af f0 d8 74 65 7d 45 98 c7 bb 7f 6e 9b e3 cd |....te}E....n...|
00000100 c0 60 91 0f 78 aa 7c 77 a7 f5 4e 7d 6e ed e1 4c |.`..x.|w..N}n..L|
00000110 8e 5e 96 ac cd 30 16 e0 2d be 9e 2d 68 d4 25 46 |.^...0..-..-h.%F|
00000120 86 77 87 be 68 ef 06 26 55 |.w..h..&U|
I am making web application, and in my output "GlassFish Server 4.1.1" i can see
Algorithm: [SHA1withRSA]
Signature:
0000: 58 CE 29 EA FC F7 DE B5 CE 02 B9 17 B5 85 D1 B9 X.).............
0010: E3 E0 95 CC 25 31 0D 00 A6 92 6E 7F B6 92 63 9E ....%1....n...c.
0020: 50 95 D1 9A 6F E4 11 DE 63 85 6E 98 EE A8 FF 5A P...o...c.n....Z
0030: C8 D3 55 B2 66 71 57 DE C0 21 EB 3D 2A A7 23 49 ..U.fqW..!.=*.#I
0040: 01 04 86 42 7B FC EE 7F A2 16 52 B5 67 67 D3 40 ...B......R.gg.#
0050: DB 3B 26 58 B2 28 77 3D AE 14 77 61 D6 FA 2A 66 .;&X.(w=..wa..*f
0060: 27 A0 0D FA A7 73 5C EA 70 F1 94 21 65 44 5F FA '....s\.p..!eD_.
0070: FC EF 29 68 A9 A2 87 79 EF 79 EF 4F AC 07 77 38 ..)h...y.y.O..w8
I am beginner and sorry if this is a stupid question. I used templates in my code which i think are free. Can this be because they are not actually free or what?
This is only information about the SSL certificate which is used by Glassfish. For the normal usage you can safely ignore this log statement.
It is totally free to use.
How can I convert a hex string to bytes array in Crystal?
Example:
87 A3 69 6E 74 01 A5 66 6C 6F 61 74 CB 3F E0 00 00 00 00 00 00 A7 62 6F 6F 6C 65 61 6E C3 A4 6E 75 6C 6C C0 A6 73 74 72 69 6E 67 A7 66 6F 6F 20 62 61 72 A5 61 72 72 61 79 92 A3 66 6F 6F A3 62 61 72 A6 6F 62 6A 65 63 74 82 A3 66 6F 6F 01 A3 62 61 7A CB 3F E0 00 00 00 00 00 00
Like this:
hexstring = "87 A3 69 6E 74 01 A5 66 6C 6F 61 74 CB 3F E0 00 00 00 00 00 00 A7 62 6F 6F 6C 65 61 6E C3 A4 6E 75 6C 6C C0 A6 73 74 72 69 6E 67 A7 66 6F 6F 20 62 61 72 A5 61 72 72 61 79 92 A3 66 6F 6F A3 62 61 72 A6 6F 62 6A 65 63 74 82 A3 66 6F 6F 01 A3 62 61 7A CB 3F E0 00 00 00 00 00 00"
bytes_array = hexstring.split.map(&.to_u8(16))
pp bytes_array, bytes_array.class
https://play.crystal-lang.org/#/r/19dh
using FFMPEG API, I try to encode a x264 video to a MP4 file with 0 frame latency and also, in realtime, show the currently encoded frame on screen (with encoding artifacts). The encoding to the file works, but so far I don't get the frames decoded right after writing them to the file. What I try is to feed the packetdata that is returned from avcodec_encode_video() right into avcodec_decode_video2() but the function returns -1 and the cmd output shows:
[h264 # 00000000025F0710] non-existing PPS 0 referenced
[h264 # 00000000025F0710] decode_slice_header error
[h264 # 00000000025F0710] no frame
here is some code i use for encoding:
AVPacket FFMpegEncoder2::write_video_frame(AVFrame* pic, int &numBytes)
{
int out_size, ret;
AVPacket pkt;
/* encode the image */
out_size = avcodec_encode_video(m_cctx, m_outbuf,
m_outbufSize, pic);
/* If size is zero, it means the image was buffered. */
assert(out_size>0) //0 frame delay
av_init_packet(&pkt);
if (m_cctx->coded_frame->pts != AV_NOPTS_VALUE)
pkt.pts = av_rescale_q(m_cctx->coded_frame->pts,m_cctx->time_base, m_video_st->time_base);
if (m_cctx->coded_frame->key_frame)
pkt.flags |= AV_PKT_FLAG_KEY;
pkt.stream_index = m_video_st->index;
pkt.data = m_outbuf;
pkt.size = out_size;
/* Write the compressed frame to the media file. */
ret = av_interleaved_write_frame(m_fctx, &pkt);
if (ret != 0) {
fprintf(stderr, "Error while writing video frame\n");
exit(1);
}
numBytes = out_size;
return pkt;
}
and then I take this returned packet and feed it into the decoder:
const AVFrame* FFMpegDecoder2::decode(AVPacket* packet){
AVPacket pkt;
av_init_packet(&pkt);
pkt.size = packet->size;
pkt.data = packet->data;
int len=0;
int got_picture=0;
while (pkt.size > 0) {
len = avcodec_decode_video2(m_cctx, m_frame, &got_picture, &pkt);
if (len < 0) {
fprintf(stderr, "Error while decoding frame %d\n", m_f);
exit(1);
}
if (got_picture) {
assert(pkt.size==len);
m_f++;
}
pkt.size -= len;
pkt.data += len;
}
assert(got_picture);
return m_frame;
}
but as stated, avcodec_decode_video2() returns -1
what am I doing wrong? Do i need to feed some headerdata into the decoder first somehow?
//edit:
if i set
m_formatCtx->oformat->flags &= ~AVFMT_GLOBALHEADER;
m_codecctx->flags &= ~CODEC_FLAG_GLOBAL_HEADER;
then i can decode the returned packet without error, but the written mp4 file will be black.
//edit: this is how i setup the decoder:
FFMpegDecoder2::FFMpegDecoder2(CodecID id)
: m_codec(NULL)
, m_cctx(NULL)
{
/* Initialize libavcodec, and register all codecs and formats. */
avcodec_register_all();
m_codec = avcodec_find_decoder(id);
if (!m_codec) {
fprintf(stderr, "codec not found\n");
exit(1);
}
m_cctx = avcodec_alloc_context3(m_codec);
m_cctx->codec = m_codec;
m_cctx->pix_fmt = PIX_FMT_YUV420P;
avcodec_open2(m_cctx, m_codec, NULL);
//alloc frame
m_frame = avcodec_alloc_frame();
}
this is what the memory window shows for the first packet (didn't copy all. the size of the first packet is 7859):
0x0000000002E66670 00 00 01 06 05 ff ff 55 dc 45 e9 bd e6 d9 48 b7 96 2c d8 20 d9 23 ee ef 78 32 36 34 20 2d 20 63 6f 72 65 20 31 32 30 20 72 32 31 34 36 20 62 .....ÿÿUÜEé.æÙH·–,Ø Ù#îïx264 - core 120 r2146 b
0x0000000002E6669F 63 64 34 31 64 62 20 2d 20 48 2e 32 36 34 2f 4d 50 45 47 2d 34 20 41 56 43 20 63 6f 64 65 63 20 2d 20 43 6f 70 79 6c 65 66 74 20 32 30 30 33 cd41db - H.264/MPEG-4 AVC codec - Copyleft 2003
0x0000000002E666CE 2d 32 30 31 31 20 2d 20 68 74 74 70 3a 2f 2f 77 77 77 2e 76 69 64 65 6f 6c 61 6e 2e 6f 72 67 2f 78 32 36 34 2e 68 74 6d 6c 20 2d 20 6f 70 74 -2011 - http://www.videolan.org/x264.html - opt
0x0000000002E666FD 69 6f 6e 73 3a 20 63 61 62 61 63 3d 30 20 72 65 66 3d 33 20 64 65 62 6c 6f 63 6b 3d 31 3a 30 3a 30 20 61 6e 61 6c 79 73 65 3d 30 78 33 3a 30 ions: cabac=0 ref=3 deblock=1:0:0 analyse=0x3:0
0x0000000002E6672C 78 31 31 33 20 6d 65 3d 68 65 78 20 73 75 62 6d 65 3d 34 20 70 73 79 3d 31 20 70 73 79 5f 72 64 3d 31 2e 30 30 3a 30 2e 30 30 20 6d 69 78 65 x113 me=hex subme=4 psy=1 psy_rd=1.00:0.00 mixe
0x0000000002E6675B 64 5f 72 65 66 3d 31 20 6d 65 5f 72 61 6e 67 65 3d 31 36 20 63 68 72 6f 6d 61 5f 6d 65 3d 31 20 74 72 65 6c 6c 69 73 3d 30 20 38 78 38 64 63 d_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dc
0x0000000002E6678A 74 3d 31 20 63 71 6d 3d 30 20 64 65 61 64 7a 6f 6e 65 3d 32 31 2c 31 31 20 66 61 73 74 5f 70 73 6b 69 70 3d 31 20 63 68 72 6f 6d 61 5f 71 70 t=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp
0x0000000002E667B9 5f 6f 66 66 73 65 74 3d 30 20 74 68 72 65 61 64 73 3d 31 20 73 6c 69 63 65 64 5f 74 68 72 65 61 64 73 3d 30 20 6e 72 3d 30 20 64 65 63 69 6d _offset=0 threads=1 sliced_threads=0 nr=0 decim
0x0000000002E667E8 61 74 65 3d 31 20 69 6e 74 65 72 6c 61 63 65 64 3d 30 20 62 6c 75 72 61 79 5f 63 6f 6d 70 61 74 3d 30 20 63 6f 6e 73 74 72 61 69 6e 65 64 5f ate=1 interlaced=0 bluray_compat=0 constrained_
0x0000000002E66817 69 6e 74 72 61 3d 30 20 62 66 72 61 6d 65 73 3d 30 20 77 65 69 67 68 74 70 3d 32 20 6b 65 79 69 6e 74 3d 32 35 20 6b 65 79 69 6e 74 5f 6d 69 intra=0 bframes=0 weightp=2 keyint=25 keyint_mi
0x0000000002E66846 6e 3d 32 20 73 63 65 6e 65 63 75 74 3d 34 30 20 69 6e 74 72 61 5f 72 65 66 72 65 73 68 3d 30 20 72 63 3d 61 62 72 20 6d 62 74 72 65 65 3d 30 n=2 scenecut=40 intra_refresh=0 rc=abr mbtree=0
0x0000000002E66875 20 62 69 74 72 61 74 65 3d 34 30 30 20 72 61 74 65 74 6f 6c 3d 31 2e 30 20 71 63 6f 6d 70 3d 30 2e 36 30 20 71 70 6d 69 6e 3d 30 20 71 70 6d bitrate=400 ratetol=1.0 qcomp=0.60 qpmin=0 qpm
0x0000000002E668A4 61 78 3d 36 39 20 71 70 73 74 65 70 3d 34 20 69 70 5f 72 61 74 69 6f 3d 31 2e 34 30 20 61 71 3d 31 3a 31 2e 30 30 00 80 00 00 00 01 65 88 84 ax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00.€....eˆ.
0x0000000002E668D3 11 ef ff f8 22 0f 8a 00 02 09 7e 38 00 08 45 c7 00 01 1d c9 39 3d 87 ff e0 ac 13 03 6d 05 f1 00 10 00 10 12 88 04 00 04 02 60 70 4e 2d cc 38 .ïÿø".Š...~8..EÇ...É9=.ÿà¬..m.ñ.....ˆ....`pN-Ì8
0x0000000002E66902 27 16 e6 07 21 1a e6 1c 84 6b 9f f0 f0 27 15 f2 7b 87 ff c1 58 2a 8a 00 04 b8 80 00 58 00 04 02 62 01 03 c1 c1 04 63 07 04 11 88 90 b1 89 0b '.æ.!.æ..kŸðð'.ò{.ÿÁX*Š..¸€.X...b..ÁÁ.c...ˆ.±..
0x0000000002E66931 1f 2c 11 02 b1 40 00 87 8f a4 f7 0f ff 82 b0 55 06 93 41 c4 10 51 00 00 40 14 00 04 00 a3 b7 35 b7 30 38 26 1e e6 1c 13 0f 73 f2 c1 10 2b 14 .,..±#...¤÷.ÿ.°U.“AÄ.Q..#....£·5·08&.æ...sòÁ.+.
0x0000000002E66960 1f 1f 1c 32 7f 94 11 82 a1 40 01 f1 00 00 40 14 01 22 00 01 e0 1e 22 0a e3 83 1c 19 3d f8 7f e0 b0 16 03 01 22 0f 88 00 02 00 00 16 20 01 17 ...2.”..¡#.ñ..#.."..à.".ãƒ..=ø.à°...".ˆ..... ..
0x0000000002E6698F 03 84 c2 5c 87 09 84 b9 06 4a e4 a4 ae 08 82 d8 e0 00 20 0f 1d 93 df c3 fe 0b 01 54 50 07 88 a8 80 00 64 09 88 58 88 58 83 84 1d 88 38 41 d8 ..Â\.....J䤮..Øà. ..“ßÃþ..TP.ˆ¨€.d.ˆXˆXƒ..ˆ8AØ
0x0000000002E669BE f2 c1 10 2b 14 00 08 f8 e0 00 62 38 64 ff 08 70 13 0a c1 d2 e9 b5 5d ba 10 80 09 a2 01 2e 07 04 c2 dc 87 04 c2 dc 81 c8 66 b9 0e 43 35 cb 0f òÁ.+...øà.b8dÿ.p..ÁÒéµ]º.€.¢....ÂÜ..ÂÜ.Èf..C5Ë.
0x0000000002E669ED ff c1 10 27 2c 00 7e 8e 00 05 64 e4 f6 1f ff 82 28 a0 00 21 99 e3 80 00 99 ac 70 00 11 39 93 93 d8 7f fe 0a c1 40 34 9a 0b e3 40 00 84 40 01 ÿÁ.',.~Ž..däö.ÿ.( .!™ã€.™¬p..9““Ø.þ.Á#4š.ã#..#.
0x0000000002E66A1C 00 01 02 88 fd cd 7d cc 0e 08 a4 dc c3 82 29 37 3f e0 88 14 8b f1 c3 1c 03 27 f0 c3 60 a0 50 62 86 da 36 1f 10 00 0a 80 00 80 14 40 00 20 00 ...ˆýÍ}Ì..¤ÜÃ.)7?àˆ..ñÃ..'ðÃ` Pb.Ú6....€.€.#. .
and this is the encoders output (until after encoding frame 0):
[libx264 # 00000000005ADAA0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShu
ffle SSE4.2
[libx264 # 00000000005ADAA0] profile High, level 3.0
[libx264 # 00000000005ADAA0] 264 - core 120 r2146 bcd41db - H.264/MPEG-4 AVC cod
ec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=0 r
ef=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=4 psy=1 psy_rd=1.00:0.00 mixed
_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pski
p=1 chroma_qp_offset=0 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 b
luray_compat=0 constrained_intra=0 bframes=0 weightp=2 keyint=25 keyint_min=2 sc
enecut=40 intra_refresh=0 rc=abr mbtree=0 bitrate=100 ratetol=1.0 qcomp=0.60 qpm
in=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'out2.mp4':
Stream #0:0: Video: h264, yuv420p, 640x480, q=-1--1, 100 kb/s, 90k tbn, 25 t
bc
[mp4 # 0000000000467570] Encoder did not produce proper pts, making some up.
This my packet data:
00 00 00 01 67 64 00 1F AC 56 24 02 80 DA 10 00
00 03 00 10 00 00 03 03 C0 F1 83 18 98 00 00 00
01 68 E8 8E 0B CB 22 C0 00 00 00 01 65 88 82 00
The first a few bytes for a first h264 packet should somewhat look like this.
00 00 00 01 ?7 ... 00 00 00 01 ?8 ... 00 00 00 01 ?5
?7 -> sps
?8 -> pps
?5 -> idr picture
There might be something else like ?6, which is sei, etc. But with SPS, PPS and the idr picture, the decoder should be able to initialize itself properly.
Another case might be the packet contains more than one picture (00 00 00 01 ?5, or 00 00 00 01 ?1). As far as I know, the decoder cannot handle h264 packets with more than one pictures properly.