Monday, December 31, 2018
Tuesday, August 28, 2018
Multiple timers in MacOS/FreeBSD without timer_t.
POSIX extensions strike again, as I did not have timer_t. dispatch functions allow multiple timers in C under MacOS.
#include#include #include int i = 0; dispatch_queue_t queue; dispatch_source_t timer1; dispatch_source_t timer2; void sigtrap(int sig) { dispatch_source_cancel(timer1); dispatch_source_cancel(timer2); printf("CTRL-C received, exiting program\n"); exit(EXIT_SUCCESS); } void vector1(dispatch_source_t timer) { printf("a: %d\n", i); i++; if (i >= 20) { dispatch_source_cancel(timer); } } void vector2(dispatch_source_t timer) { printf("b: %d\n", i); i++; if (i >= 20) //at 20 count cancel the { dispatch_source_cancel(timer); } } int main(int argc, const char* argv[]) { signal(SIGINT, &sigtrap); //catch the cntl-c queue = dispatch_queue_create("timerQueue", 0); // Create dispatch timer source timer1 = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); timer2 = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); // Set block for dispatch source when catched events dispatch_source_set_event_handler(timer1, ^{vector1(timer1);}); dispatch_source_set_event_handler(timer2, ^{vector2(timer2);}); // Set block for dispatch source when cancel source dispatch_source_set_cancel_handler(timer1, ^{ dispatch_release(timer1); dispatch_release(queue); printf("end\n"); exit(0); }); dispatch_source_set_cancel_handler(timer2, ^{ dispatch_release(timer2); dispatch_release(queue); printf("end\n"); exit(0); }); dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC); // after 1 sec // Set timer dispatch_source_set_timer(timer1, start, NSEC_PER_SEC / 5, 0); // 0.2 sec dispatch_source_set_timer(timer2, start, NSEC_PER_SEC / 2, 0); // 0.5 sec printf("start\n"); dispatch_resume(timer1); dispatch_resume(timer2); dispatch_main(); return 0; }
Monday, June 11, 2018
ISO rejection of Simon
I am a circuit designer by training, and not a cryptographer. One of the thing that I've found from working with cryptographers, is that I find them to be odd to work with by nature. It's most like because their products are seldom tangible, and therefore there is a lot of infighting.
In this article on the ISO rejection of SIMON, there's a quote regarding the NSA from Tomer Ashur: "They refused to motivate design choices they made such as the choice of matrices U, V, and W in Simon’s key schedule. Instead, they chose to personally attack some of the experts (including @hashbreaker, Orr Dunkelman and myself) as incompetent."
Well, I know the design choices behind U, W, V, which were related to slide attacks for some internal tool they had based on the rounds. I do not know anything about the tool, but Shor's mentioned this when I asked when I was writing my Simontool paper. The matrices in question with circuit implementation are in my simontool.supplemental.pdf. The question at hand is how U, W, and V where decided; however, I cannot answer that as I do not have their internal tools. Having said that, the circuits are beautiful, and perhaps someone will do a detailed analysis of the tradeoffs between each matrix for rounds.
In this article on the ISO rejection of SIMON, there's a quote regarding the NSA from Tomer Ashur: "They refused to motivate design choices they made such as the choice of matrices U, V, and W in Simon’s key schedule. Instead, they chose to personally attack some of the experts (including @hashbreaker, Orr Dunkelman and myself) as incompetent."
Well, I know the design choices behind U, W, V, which were related to slide attacks for some internal tool they had based on the rounds. I do not know anything about the tool, but Shor's mentioned this when I asked when I was writing my Simontool paper. The matrices in question with circuit implementation are in my simontool.supplemental.pdf. The question at hand is how U, W, and V where decided; however, I cannot answer that as I do not have their internal tools. Having said that, the circuits are beautiful, and perhaps someone will do a detailed analysis of the tradeoffs between each matrix for rounds.
Thursday, April 12, 2018
Two random words under MacOS
As MacOS doesn't have sort -R, if you want to randomize a list, it gets a bit more complicated.
In order to generate two random words, I'm currently using:
In order to generate two random words, I'm currently using:
cat /usr/share/dict/words | awk 'BEGIN{srand();}{print rand()"\t"$0}' \ | sort -k1 -n | cut -f2- | awk 'NR <= 2 { print $1 }'
Wednesday, March 28, 2018
AES S-Box reference implementation.
One of the things that has always bothered me about academia is the "minimally publishable item". I was trying to find a reference AES circuit implementation, and I never found one, so I started writing one for me to use internally. I found the document to be so useful, I sent it out to see if anyone was interested in the tech report. Of course, no one was, so what I have is a very good text book chapter or a nice tech report that everyone seems to want, but no one wants to publish. I used to publish things on ece.gatech.edu, but they decided grad student work was not important enough to be persistent. Once I was postdoc, the same thing happened. I'm hedging now that github will be around long enough for this work to be useful. I now present:
A reference implementation of the AES S-Box:
https://github.com/bpdegnan/aes/tree/master/aes-sbox
A reference implementation of the AES S-Box:
https://github.com/bpdegnan/aes/tree/master/aes-sbox
Wednesday, January 31, 2018
Getting TeXShop to make acronym glossaries in LaTeX
I have no idea why this was so difficult. You need to make engine for TeXShop to create glossaries.
Once you restart TeXShop, you'll see "make-glossaries" in the drop down.
cd ~/Library/TeXShop/Engines
Now you need a text editor that can do ASCII files to create the engine. I called mine: make-glossaries.engine
#!/bin/bash
bfname=$(dirname "$1")/"`basename "$1" .tex`"
makeindex -s "$bfname".ist -t "$bfname".alg -o "$bfname".acr "$bfname".acn
makeindex -s "$bfname".ist -t "$bfname".glg -o "$bfname".gls "$bfname".glo
Next you need to make it executable: chmod +x make-glossaries.enginebfname=$(dirname "$1")/"`basename "$1" .tex`"
makeindex -s "$bfname".ist -t "$bfname".alg -o "$bfname".acr "$bfname".acn
makeindex -s "$bfname".ist -t "$bfname".glg -o "$bfname".gls "$bfname".glo
Once you restart TeXShop, you'll see "make-glossaries" in the drop down.
Subscribe to:
Posts (Atom)