1. 시작
앞으로 작성할 크립토 프로젝트에서 가장 중요한 부분인 크립토 라이브러리에 대한 글들을 먼저 써보려 한다. 이 라이브러리의 이름은 i_crypto로 지었다. 여기서 i는 그냥 내가 정한 prefix이다. prefix를 붙이는 이유는 여러 이유가 있지만 수많은 암복호화 함수가 enc, dec등으로 네이밍을 할텐데, 이 때 prefix를 붙이지 않으면 이름 충돌이 일어날 수도 있고 이 함수를 내가 만들었다는 것을 확인하기위해 붙였다. i라고 붙인 이유는 별 의미는 없고 그냥 애플을 좋아하는데 iPhone, iPad에서 소문자 i가 이뻐보여서 i로 정하였다. 우선 오늘은 i_crypto 라이브러리의 구성이 어떻게 되어있는지 작성해보겠다. 이 글 이후에는 실제 인터페이스들을 어떻게 구현했는지, 그러면서 중간중간 필요한 보안 지식들에 대해 쓸 예정이다.
2. 구조
I_CRYPTO 프로젝트에서 tree 명령어를 이용하여 간략하게 구조를 보이도록 하였다. 현재 보이는 것은 Doxygen 디렉토리와 i_crypto_library 디렉토리 둘 만 보이는데 프로젝트 전체적으로 다른 디렉토리가 더 있지만 이번에 설명할 것은 i_crypto_library이기 때문에 이 둘만 보이도록 해 놓았다. Doxygen 디렉토리는 i_crypto 라이브러리에서 제공하는 인터페이스들에 대한 설명들을 문서화하기 위해 필요한 파일이 들어있어 같이 보이게 하였다. i_crypto_conf가 그 파일이며 이를 이용하면 Doxygen 명령어를 이용해 i_crypto_library의 include에 들어있는 헤더파일을 문서화할 수 있다. 이는 아래에서 문서화 했을 때 어떤 식으로 나오는지 보여주도록 하겠다.
i_crypto_library의 구조를 위에서부터 하나씩 살펴보자. 먼저 doc에는 doxygen을 이용하여 html로 보기 쉽게 문서화한 파일들의 압축 파일이 들어있다. .tar, .zip둘다 넣어놨으며 해당 압축을 풀고 index.html을 클릭
하면 인터페이스들에 대한 설명을 볼 수 있다. 이 설명은 밑에 include 디렉토리에 들어있는 헤더파일에 Doxygen 문법에 맞게 주석으로 기술해 놓으면 Doxygen이 자동으로 문서화 해준다. 다음은 include/i_crypto.h에 작성해놓은 Doxygen 문법에 맞는 주석에 대한 사진이다.
이런식으로 헤더파일에 설명을 달아놓으면 Doxygen을 이용해 문서화할 수 있다. Doxygen 사용법에 대해선 아래 링크를 참고했다.
https://cubrid.co.kr/blog/3824048
CUBRID | 블로그 - Doxygen으로 소스코드 문서화 해보기
오픈소스 프로젝트를 이용해서 개발을 해보신 분들은 소스코드를 문서화한 레퍼런스 문서(또는 개발자 매뉴얼)을 참고해서 개발해 본 경험이 있을 것 같습니다. 개발자를 위한 이러한 문서는
cubrid.co.kr
이렇게 헤더파일이 있다면 이 헤더에 맞는 구현 코드가 있어야 한다. 실제 구현 코드는 src 디렉토리에 i_crypto.c에 작성하였다. src 디렉토리엔 이 c소스 외에 makefile이 들어있는데, make명령어를 실행하면 lib디렉터리에 libICrypto.so라는 공유라이브러리 파일이 자동으로 생성되게 된다. 실제 고객에게 배포한다면, 소스코드를 배포하는 것이 아닌 헤더와 이 .so파일만 공유하게 된다. 마지막으로 sample 디렉토리에는 샘플 c코드가 들어있으며 이 라이브러리가 제공하는 인터페이스들을 어떻게 사용하면 되는지 예시 코드들이 작성되어있다. 이 샘플 디렉토리 또한 makefile을 제공하며 make 명령어로 빌드, make test로 간단하게 샘플 코드를 실행할 수 있게끔 만들어 놓았다. 이렇게까지가 i_crypto_library의 전체적인 구조에 대한 설명이다. 밑에는 이 라이브러리의 인터페이스에 대한 설명을 Doxygen으로 문서화 했을 때, 어떤식으로 html로 보여지는지에 대한 예시 사진이다.
왼쪽을 보면 각 인터페이스마다 간략한 설명들이 보이는 걸 확인할 수 있고, 오른쪽은 더 자세히 보고싶은 인터페이스를 클릭했을 때 나오는 화면으로, 보다 자세한 설명들이 나와있는 것을 알 수 있다. 이런식으로 보기 쉽게 문서화 해놓는다면 라이브러리를 제공받는 사람이 인터페이스를 보다 쉽게 사용할 수 있을 것이다. 오늘은 이렇게 Doxygen을 이용한 문서화가 어떤식으로 되는지 알아보았고, 앞으로 설명할 i_crypto 라이브러리의 구조에 대해서 간단하게 살펴보았다. 처음에 말한대로, 앞으로 직접 구현한 인터페이스들에 대한 설명들을 업로드한다는 것을 다시 한번 말하면서 이번 글을 마치겠다.
github : https://github.com/0xGh-st/I_CRYPTO.git
GitHub - 0xGh-st/I_CRYPTO
Contribute to 0xGh-st/I_CRYPTO development by creating an account on GitHub.
github.com
'C > Crypto' 카테고리의 다른 글
Crypto Project : 1-5. 암복호화 init, update, final 구현 (0) | 2023.04.16 |
---|---|
Crypto Project : 1-4. C언어에서 멤버변수 접근을 막는 방법과 init, update, final의 개념 (0) | 2023.04.15 |
Crypto Project : 1-3. 암호화, 복호화 함수(enc, dec) (1) | 2023.04.14 |
Crypto Project : 1-2. 블록암호운용모드 ECB를 이용한 CBC, CTR 모드 구현 (0) | 2023.04.13 |
Crypto Project : Prologue (0) | 2023.04.10 |