ASN.1 ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๊ฐ๋ฐ ํ๊ธฐ ์ํด์ ASN.1 ์ปดํ์ผ๋ฌ๊ฐ ํ์ํ๋ค.
์ค์ ๋ก ์์ฉ ๋ฒ์ ์ ์ปดํ์ผ๋ฌ๋ ๋ผ์ด์ผ์ค ๋น์ฉ์ด ๋น์ธ๋ค
์ฌ๊ธฐ์๋ ํ์ฌ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์คํ์์ค์ธ asn1c ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ด๋ค.
ํด๋น ํด์ ํํ์ด์ง์์ ๊ด๋ จ ์ค๋ช
๊ณผ GitHub ์์ ์์ค๋ฅผ ๋ค์ด ๋ฐ์ ์ ์๋ค.
๊ทธ๋ผ asn1c ์ ๋ํด ์ฌ์ฉ๋ฒ์ ์์๋ณด์.
ASN1C ์ค์น
asn1c ๋ฅผ ์์คํ์ผ์ ํ์ด ๋ณด์
ํ์ฌ ๋ค์ด ๋ฒ์ ์ 0.9.28 ๋ฒ์ ์ด๋ค.
tar zxvf asn1c-0.9.28.tar.gz
cd asn1c-0.9.28
./configure
make
make install
์ค์น๋ ๊ฐ๋จํ ํ๋ค.
์ฐธ๊ณ ๋ก make install ์ root ๊ถํ์ด ํ์ํ๋ค.
root ๊ถํ์ด ์๋๋ผ๋ฉด sudo make install ์ ํด์ฃผ๋ฉด ๋๋ค.
๋๋ ์ค์น ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฃจํธ ๊ถํ์ ์ด์ฉํ๋ฉด ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก๋ /usr/local/bin/asn1c ์์น์ asn1c ๋ช
๋ น์ด๊ฐ ์ค์น ๋๋ค.
๋ง์ฝ ์ค์น ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝ ํ๋ ค๋ฉด ./configure --prefix=/path ์ต์
์ ์ฌ์ฉํด์ ๋ณ๊ฒฝ ํ๋ฉด ๋๋ค.
prefix ์ต์
์ ์ฌ์ฉํด ๋ฃจํธ ๊ถํ์ด ํ์ํ์ง ์๋ ์์น๋ผ๋ฉด make install ๋ง ํด์ฃผ์ด์ ์ฌ์ฉ ํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ์ค์น๊ฐ ๋๋ฉด asn1c ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ์์ฑ ๋๋๋ฐ ์ด ๋ช
๋ น์ด์ ๋ํ man ์ผ๋ก ๊ธฐ๋ฅ ์ต์
์ ํ์ธ ํ ์ ์๋ค.
๊ฐ๋จํ man asn1c ๋ผ๊ณ ์
๋ ฅ ํ๋ฉด ์๋ ์ฒ๋ผ ์ค๋ช
์ด ๋์จ๋ค.
man asn1c
NAME
asn1c -- the ASN.1 Compiler
SYNOPSIS
asn1c [-E [-F] | -P | -R]
[-Sdir] [-X]
[-Wdebug-...] [-foption] [-gen-option] [-pdu={all|auto|Type}]
[-print-option]
input-filenames...
DESCRIPTION
asn1c compiles ASN.1 specifications into a set of target language
(C/C++) encoders and decoders for BER, DER, PER, XER and other encoding
rules.
๋ก ๊ฐ๋จํ ๋ช ๋ น์ด์ ๋ํ ์ค๋ช ์ ํ์ธ ํ ์ ์๋ค.
ASN1C ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
์์ ASN1 ์๋ ์ฒ๋ผ ์๋ค๊ณ ํ์
TestModule DEFINITIONS ::= BEGIN -- Module parameters preamble
Circle ::= SEQUENCE { -- Definition of Circle type
position-x INTEGER, -- Integer position
position-y INTEGER, -- Position along Y-axis
radius INTEGER (0..MAX) -- Positive radius
} -- End of Circle type
END -- End of TestModule
์ด ๋ด์ฉ์ด๋ฅด ex.asn1 ํ์ผ๋ก ์ ์ฅ์ ํ์
ASN1.C ๋ฌธ๋ฒ ํ ์คํธ
์ด ๋ชจ๋์ ์ปดํ์ผ์ ํ๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํ ํ๋ค.
asn1c -EF ex1.asn1
์ด๋ ๊ฒ ์๋ฌ๊ฐ ์์ด ASN1 ๋ชจ๋ ๊ฐ์ด ๋์ค๋ฉด ์ ์ ํ์ผ์ด๋ค.
BER ๋ฑ ์ฌ๋ฌ๊ฐ์ง ์ธ์ฝ๋/๋์ฝ๋ ์์ค ๋ง๋ค๊ธฐ
asn1c ex.asn1
์ด ๋ช
๋ น์ด๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋ง์น๋ฉด ์ฌ๋ฌ๊ฐ์ง ์์ค ํ์ผ์ด ์์ฑ๋๋ค.
๋ณดํต ์์ฉ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํค๋๋ฅผ ์์ฑ์ ํด์ฃผ๋๋ฐ
asn1c ๊ฒฝ์ฐ ์์ค๋ฅผ ์์ฑ ํ๋ค.
์ฐธ๊ณ ๋ก ๊ฐ๋จํ ๋ชจ๋์ด๋ผ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑํด์ผํ๋ ASN.1 ๊ธฐ๋ฅ ์์ค๊ฐ ์์ด์ ์๋นํ ๋ง์ ํ์ผ์ด ์๊ธด๋ค.
์์ ๋ก ์๊ธด ํ์ผ์ ๋ค์๊ณผ ๊ฐ๋ค
jykim@jykim-VirtualBox:~/work/test$ ls
asn_application.h BIT_STRING.h INTEGER.c per_opentype.c
asn_codecs.h Circle.c INTEGER.h per_opentype.h
asn_codecs_prim.c Circle.h Makefile.am.sample per_support.c
asn_codecs_prim.h constraints.c NativeEnumerated.c per_support.h
asn_internal.h constraints.h NativeEnumerated.h xer_decoder.c
asn_system.h constr_SEQUENCE.c NativeInteger.c xer_decoder.h
ber_decoder.c constr_SEQUENCE.h NativeInteger.h xer_encoder.c
ber_decoder.h constr_TYPE.c OCTET_STRING.c xer_encoder.h
ber_tlv_length.c constr_TYPE.h OCTET_STRING.h xer_support.c
ber_tlv_length.h converter-sample.c per_decoder.c xer_support.h
ber_tlv_tag.c der_encoder.c per_decoder.h
ber_tlv_tag.h der_encoder.h per_encoder.c
BIT_STRING.c ex.asn1 per_encoder.h
์์ฑ๋ ํ์ผ์ ๋ณด๋ฉด ber, der, per, xer ์ธ์ฝ๋ฉ ๋์ฝ๋ฉ API ๊ฐ ์์ฑ ๋๊ฒ์ ๋ณผ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก BER ๊ณผ PER์ ๋ํดํธ๋ก ์ง์ํ๋ค.
๊ทธ๋ฆฌ๊ณ BER๊ณผ PER ๋ํดํธ ์ง์์ PER ํ๋๋ง ์ง์์ ํ๋ ค๋ฉด ๋ค์ ์ฒ๋ผ ์ฌ์ฉํ๋ค.
asn1c -gen-PER ex.asn1
์์ฑ๋ ์์ค ์ฝ๋ ์ปดํ์ผ
cc -DPDU=Circle -I. -o EX.ex *.c
์ด ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด EX.ex ๋ผ๋ ๋ฐ์ด๋๋ฆด๊ฐ ์์ฑ ๋๋ค.
convert-samlep.c ๊ฐ ๋ฉ์ธ ์์ค์ด๋ค.
Usage: ./EX.ex [options] <data.ber> ...
Where options are:
-iper Input is in Unaligned PER (Packed Encoding Rules) (DEFAULT)
-iber Input is in BER (Basic Encoding Rules)
-ixer Input is in XER (XML Encoding Rules)
-oper Output in Unaligned PER (Packed Encoding Rules)
-oder Output in DER (Distinguished Encoding Rules)
-oxer Output in XER (XML Encoding Rules) (DEFAULT)
-otext Output in plain semi-structured text (dump)
-onull Verify (decode) input, but do not output
-per-nopad Assume PER PDUs are not padded (-iper)
-1 Decode only the first PDU in file
-b <size> Set the i/o buffer size (default is 8192)
-c Check ASN.1 constraints after decoding
-d Enable debugging (-dd is even better)
-n <num> Process files <num> times
-s <size> Set the stack usage limit (default is 30000)
์ฌ๊ธฐ์ ๊ฐ๋ฐ ํ๋ก๊ทธ๋จ ๋ด์์ ์ฌ์ฉ ํ๋ ค๋ฉด ์ด conver-sample.c ์์ค๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ด ํฌํจํ๊ฑฐ๋
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋ฉด ๋๋ค.
RFC ๋ฌธ์๋ฅผ ASN1 ํ์ผ ๋ณํ
asn1c ๋ฅผ ์ค์นํ๋ฉด examples ํ์ผ์ crfc2asn.pl ์ด๋ผ๋ Perl ํด์ด ์๋๋ฐ
์ด ํด์ RFC ๋ฌธ์ ๋ด์ ์๋ ASN.1 ๋ฌธ๋ฒ ํ์ผ์ ์ถ์ถ ํ๋ ์ ํธ์ด๋ค
์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค
./crfc2asn1.pl
Extract the ASN.1 specification from the RFC file(s).
Usage 1: ./crfc2asn1.pl <rfc-file.txt> ...
Usage 2: <someprog> | ./crfc2asn1.pl
์ด ํด์ ์ด์ฉํด RFC๋ฌธ์์์ ๊ฐ๋จํ ASN1 ๋ฌธ๋ฒ์ ๊ฐ์ ธ์์ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ ๋ก ๋ชจ๋ ๋ฌธ์๊ฐ ์ ๋์ง๋ ์์๋ค.
ํ์์ ๋ฌธ์๋ฅผ ์์ ํ ์คํ ํด์ผ ํ๋ค.
ํํ์ด์ง์์ ๋ค์ด๋ฐ์ ๊ฐ์ด๋ ํ์ผ์ด๋ค
๊ฐ์ธ์ ์ผ๋ก OpenSSL ์ ์ฌ์ฉํ๋ฉด ASN.1 ์ปดํ์ผ๋ฌ๋ฅผ ๋ณ๋ฃจ ์ฐ์ง๋ ์๋๋ค
๊ฐ๋ OpenSSL ์์ ์ ์ ๋์ง ์์ ASN.1 ๋ชจ๋์ด ํ์์ ์ง์ ์ถ๊ฐํด์ ์ฌ์ฉํ๋ค.
ํ์ง๋ง BER ๋๋ DER ์ธ์ฝ๋ฉ์ด ์๋๋ผ PER ๊ฐ์ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ค๋ฉด OpenSSL ์ ์ง์ ํ์ง ์๋๋ค.
์ด๋๋ asn1c๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
asn1c ๋ ํ์ํด์ ์ฌ์ฉ๋ฒ ์ ๋ฆฌ๋ฅผ ํด ๋ณด์๋ค.
'PKI > ASN.1' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CER( Canonical Encoding Rules ) ์ ํน์ฑ (DER๊ณผ ๋น๊ต) (0) | 2023.06.30 |
---|---|
ASN.1 ์ธ์ฝ๋ฉ ๋ฐฉ์ (0) | 2023.06.29 |
ECDSA ๊ฐ์ธํค ASN.1 ํ์ (0) | 2023.05.02 |
Distinguished Encoding Rules (0) | 2022.11.07 |
Basic Encoding Rules (3/3) (0) | 2022.11.07 |