Sabtu, 10 Desember 2011

Format Command APDU ISO 7816 - 4

Sebelum kita melanjutkan postingan tentang command APDU, terlebih dahulu kita harus tahu apa itu APDU. APDU (Application Protocol Data Unit) adalah protokol yang digunakan untuk berkomunikasi antara smart card reader dan smart card.
Berikut format dari APDU yang dikirim smart card reader ke smart card

CLA | INS | P1 - P2 | Lc Field | Data field | Le field |

Note : 
CLA : Class of instructions
INS   : Instructions Code  (command APDU)
P1     : Instructions parameter 1
P2     : Instructions parameter 2
Lc     : Number of bytes presents in data field of the command
Data  : String of bytes sent in data field of the command
Le     : Maximum number of bytes expected in the data field of the response to the command

Lalu ini format response yang diterima oleh smart card reader

Data | SW1 | SW2 |

Data             : Response data
SW1 - SW2 : Processing status yang mengindikasikan itu sukses atau tidak.

Jika kurang jelas, kalian bisa lihat di sini

Sekian dari saya mengenai pengenalan format command apdu :)

Array Function Pointer

Masih di topik yang sama, yakni function pointer. Topik sekarang yakni Array Function Pointer, jadi Array  tersebut berisi fungsi - fungsi. Dari pada bak bik buk, langsung aja liat kodenya :

file functions.h :
#define pointer_functions

#ifdef pointer_functions
int sum (int a, int b);
int subtract (int a, int b);
int multiply (int a, int b);
int devide (int a, int b);

#endif

File functions.c :
#include <stdio.h>
#include <string.h>
#include "functions.h"

int sum (int a, int b) {
return a + b;
}

int subtract (int a, int b) {
return a - b;
}

int multiply (int a, int b) {
return a * b;
}

int devide (int a, int b) {
if ( b )
return a/b;
else
0;
}

File main.c
#include <stdio.h>
#include <string.h>
#include "functions.h"

void main() {
int a = 2;
int b = 4;
int ( *p [5] ) ( int , int ) = { sum,  subtract,  multiply,  devide };
int r;

r = p[0](a, b);

        printf("result %d\n", r);
}

hasil run :
result 6

Bisa dilihat kalau tiap fungsi yang ada di file functions.c dimasukin dalam array p, bisa dikatakan diregister ke dalam array tersebut. Kemudian dalam array tersebut bisa dipanggil. Kalau kurang jelas bisa dilihat di sini

Note : ini digunakan jika kita mempunyai fungsi yang sama, dan kita memiliki alur program yang sama sehingga hanya memanggil tiap fungsi tersebut sebagai menjadi per state.

Sekian, terima kasih :)

Jumat, 09 Desember 2011

Function Pointer

Hari ini mau tulis tentang function pointer. Langsung aja ke kode ya

#include <string.h>
#include <stdio.h>

void (*p)(char *);


void function(char *param) {
printf("param %s\n", param);
}

void main() {
char buff[100] = "learn pointer function";

p = &function;

        p(buff);
}

result : param learn pointer function

Coba perhatikan p = &function, bisa diperhatikan kalau p sebagai pointer yang kemudian menunjuk ke fungsi function, jadi seolah - olah p itu ada fungsi dari function. Itu seperti terlihat miror.

Keuntungan menggunakan cara ini adalah,
  • Bisa digunakan untuk passing fungsi sebagai parameter pada fungsi
  • Lebih flexibel, karena fungsi itu berupa variabel
Sekian dari saya, jika kurang jelas bisa lihat di sini

Terima kasih

Kamis, 08 Desember 2011

ISO 7816 - 4

Kali ini saya mau tulis tentang iso 7816-4. Sedikit intro, iso 7816 - 4 itu digunakan pada smart card yang sudah ada sekarang mereka menggunaka APDU messages. Sepengetahuan saya, yang menggunakan APDU messages itu Desfire (dari keluaraga nfc) dan EMV.

Tapi kali ini saya hanya memberikan pendahuluan tentang apa yang perlu diketahui dari iso 7816 - 4 :

  1. Isi messsage, command(perintah) dan response dari device (dalam hal ini bisa Electronic Data Capture untuk keluarga EMV dan PCD untuk keluarga NFC)
  2. Struktur dan kontent dari byte yg dikirim sebelumnya oleh kartu selama ATR (Answer To Reset)
  3. Struktur dari data dan files
  4. Metode akses pada file - file dan data dalam kartu
  5. Metode akses untuk proses algoritma oleh kartu
Untuk bagian isinya nanti saya akan posting lagi :)

Sekian dulu

Belajar Makro di C

Hari ini mau belajar makro di C. Di makro kita kenal namanya syantax #define, #ifdef#ifndef#endif dll.
Berikut penjelasannya :

  1. #define, digunakan untuk mendefinisikan sesuatu menjadi hal yg umum
  2. #ifdef digunakan dalam kondisi jika variable itu sudah di define dalam makro maka kolom yg ada dalam #ifdef akan dieksekusi
  3. #ifndef, kebalikan dari #ifdef. Jika tidak dijelaskan dalam makro makanya kolom dalam #ifndef tersebut dieksekusi
  4. #endif, untuk mengakhiri kondisi dari makro #ifdef dan #ifndef
Saya punya petikan kode


#include<stdio.h>
#include<string.h>

#define HAPUS(a)        memset(a, 0x00, sizeof(a))
#define COPY(a, b)      memcpy(b, a, sizeof(b))

#define mymakro

void main(){
        char buff[255];
        char source[255] = "Mari kita lihat makro";

        HAPUS(buff);

#ifdef mymakro
        COPY(source, buff);
#endif

        printf("result : %s\n", buff);
}

kalau diliat ada fungsi makro HAPUS() dan COPY(), itu menjelaskan kalo kita bisa membuat fungsi makro mengunakan #define. Kemudian yang ada didalam kolom mymakro itu dieksekusi, itu karena sebelumnya sudah kita definisikan makro mymakro, jika tidak didefinisikan maka variable buff masih kosong. 

Kira - kira begitu cara mainnya. Sekian dari saya

Terima kasih

Senin, 05 Desember 2011

Port forwarding menggunakan rinet

Halo,
Kali ini saya mau tulis gimana cara melakukan port forwarding menggunakan rinet. Ini saya lakukan pada ubuntu 10.10.
Langkah - langkahnya :

  1. Install rinet : sudo apt-get install rinetd
  2. kemudian edit file rinetd.conf : vim /etc/rinetd.conf (saya menggunakan editor vim)
  3. restart rinetd : sudo service rinetd restart
Isi file rinetd.conf :

#ipaddrsource     #portsource      #ipaddrdest       #portdest
192.168.7.7            1010              10.10.10.1         8205

penjelasan :
Jadi setiap paket data yg lewat ip 192.168.7.7 dan port 1010 itu akan disalurkan ke ip 10.10.10.1 dan port 8205

Mudah bukan :)

Sekian tulisan dari saya

Kamis, 17 November 2011

Copy string ke member struct

Hari ini mau tulis mengenai cara kopi string ke member struct yg berbentuk array of char. Misalkan ada struct yang bentuknya begini :

typedef struct {
      char member1[10];
      char member2 [15];
}st;

lalu ada string (array of char) seperti ini :

char buff[70] = "Hari ini kita belajar programing bahasa C dengan bahasan struct";

lalu untuk mengkopinya, kita menggunakan memcpy, berikut cuplikan codenya :

st myST;
memcpy(myST.member1, &buff[0], 9);
memcpy(myST.member2, &buff[10], 14);
printf("member1  %s", myST.member1);
printf("member2  %s", myST.member2);

outputnya :

member1 Hari ini k
member2 ita belajar pro

Tapi jika codenya kita salah tulis size num, misalnya :

memcpy(myST.member1, &buff[0], 10);
printf("member1  %s", myST.member1);

maka yg nantinya ke print

member1 Hari ini kita belajar prog

bisa dilihat walaupun yg ingin kita kopi 10 tapi yg ke kopi malah 25, itu karena setiap member dalam struct itu saling berhubungan. Jadi bisa dibilang ukurannya adalah jumlah size dari 2 member dalam struct tersebut.

*sekedar info panjang buff diatas itu 63