2005年4月17日 (日曜日)

09:52:49 # Life tlaをつかっていて気づいた点. 先週くらいから,家計簿を電子化しようとしていて,そのツールとして 処理系はawkでバージョン管理は分散レポジトリ形式のtlaを利用する,ということを 試している.awkをつかっているところがなんともoldtypeだが, tlaをつかっているところが味噌. 動機は,tlaが分散レポジトリを扱える,フリーな処理系であること. 出先でノートパソコンを使っていて, ネットワークに接続できなくてもtla commitとかできて, オンラインになれば,tla star-mergeすればよい. イントラネットからしか見れないサーバでバージョン管理をする際などに便利じゃないか,と考えている.

まだ一週間だが,こういう問題があるんだろうなぁ,と今思っている点.

19:06:10 # Life libgcrypt11でhash関数を使う方法を調べてみた. ドキュメントが古かったりして,はめられたが,includeファイルとソースにあたったらどうやら, これでいけるみたい. sha1sumコマンドの出力と同じような出力が出ることは確認...というか,ドキュメントを読むより, sha1sumのソースにあたったほうがはやかったか.

/*
 Code snippet to calculate SHA1sum using openssl libs.
 Copyright 2005 Junichi Uekawa, given to public domain.

$ gcc openssltest.c -lssl
$ ./a.out  < ./a.out
eae8189278303caaa78f2d89e6a6ebeb7d37b554
$ sha1sum ./a.out
eae8189278303caaa78f2d89e6a6ebeb7d37b554  ./a.out
*/

#include <stdio.h>
#include <openssl/sha.h>

main ()
{
  SHA_CTX s;
  int i, size;
  char c[512];
  unsigned char hash[20];
  
  SHA1_Init(&s);
  while ((size=read (0, c, 512)) > 0)
    SHA1_Update(&s, c, size);
  SHA1_Final(hash, &s);
  
  for (i=0; i < 20; i++)
    printf ("%.2x", (int)hash[i]);
  printf ("\n");
}
	

以下のようになる.

/*
 Code snippet to calculate SHA1sum using gcrypt.
 Copyright 2005 Junichi Uekawa, given to public domain.

$ gcc hashtest.c $(libgcrypt-config --cflags --libs)
$ ./a.out < a.out 
46b25183fba09a11c4f71bc5a12804756a362639
$ sha1sum ./a.out 
46b25183fba09a11c4f71bc5a12804756a362639  ./a.out
*/


#include <stdio.h>
#include <gcrypt.h>

main ()
{
  gcry_md_hd_t g;
  int i, size;
  char c[512];
  unsigned char * hash;
  
  gcry_md_open (&g, GCRY_MD_SHA1, 0);
  while ((size=read (0, c, 512)) > 0)
    gcry_md_write(g, c, size);
  gcry_md_final(g);
  hash=gcry_md_read(g, 0);
  for (i=0; i < 20; i++)
    printf ("%.2x", (int)hash[i]);
  printf ("\n");
}

	
Junichi Uekawa

$Id: dancer-diary.el,v 1.87 2005/04/06 02:41:33 dancer Exp $