zoukankan      html  css  js  c++  java
  • OPENSSL

    apps/openssl.c
    main()

    • apps_startup
    • prog = prog_init -> LHASH_OF(FUNCTION) * /* init f from function [] in prog.h */
    • pname = opt_progname
    • f.name = pname
    • fp = lh_FUNCTION_retrieve(prog, &f)
      /* first check the program name */
    • if (fp != NULL)
    • argv[0] = pname
    • ret = fp->func(argc, argv)
    • goto end;
      /* If there is stuff on the command line, run with that. */
    • if (argc != 1)
    • do_cmd(prog, argc, argv)
      /* ok, lets enter interactive mode */
    • for(;
      /* Read a line, continue reading if line ends with \ */
    • for(p = buf, n = sizeof(buf), i = 0, first = 1; n > 0; first = 0)
    •   chopup_args(&arg, buf) -> arg
      
    •   do_cmd(prog, arg.argc, arg.argv)
      

    +end:

    • lh_FUNCTION_free(prog)

    • apps_shutdown

      const OPTIONS list_options[]
      list_main
      const OPTIONS help_options[]
      help_main

    +++ EVP_get_digestbyname
    f.type = FT_md;
    f.func = dgst_main;
    fp = &f;
    +++ EVP_get_cipherbyname
    f.type = FT_cipher;
    f.func = enc_main;
    fp = &f;
    ssl/ssl_init.c
    ++ OPENSSL_init_ssl
    crypto/init.c
    +++ OPENSSL_init_crypto
    +++ #define RUN_ONCE

    conf_lib.c
    CONF *NCONF_new
    void CONF_free

    typedef struct ASN1_ENCODING_st {
        unsigned char *enc;         /* DER encoding */
        long len;                   /* Length of encoding */
        int modified;               /* set to 1 if 'enc' is invalid */
    } ASN1_ENCODING;
    
    typedef struct ASN1_AUX_st {
        void *app_data;
        int  flags;
        int  ref_offset;          /* Offset of reference value */
        int  ref_lock;            /* Lock type to use */
        ASN1_aux_cb *asn1_cb; 
        int  enc_offset;          /* Offset of ASN1_ENCODING structure */
    } ASN1_AUX;
    
    /* 
     * This is the ASN1 template structure that defines a wrapper round the
     * actual type. It determines the actual position of the field in the value
     * structure, various flags such as OPTIONAL and the field name.
     */
    struct ASN1_TEMPLATE_st {
      unsigned long flags;        /* Various flags */
      long tag;                   /* tag, not used if no tagging */
      unsigned long offset;       /* Offset of this field in structure */
      const char *field_name;     /* Field name */
      ASN1_ITEM_EXP *item;        /* Relevant ASN1_ITEM or ASN1_ADB */
    };
    
    struct ASN1_ITEM_st {
      char type;                          /* The item type, primitive, SEQUENCE, CHOICE
                                           * or extern */
      long utype;                         /* underlying type */
      const ASN1_TEMPLATE *template;      /* If SEQUENCE or CHOICE this contains
                                           * the contents */
      long count;                         /* Number of templates if SEQUENCE or CHOICE */
      const void *funcs;                  /* functions that handle this type */
      long size;                          /* Structure size (usually) */
      const char *sname;                  /* Structure name */
    };
    

    OPENSSL Wiki
    Compilation_and_Installation
    How_to_Integrate_a_Symmetric_Cipher
    How_To_Write_Unit_Tests_For_OpenSSL
    OpenSSL Command-Line HOWTO
    Command Line Utilities
    Stack API
    CSDN文章
    openssl源码之ASN1从找不到X509_new的定义说起
    asn1编码格式的解析过程
    openssl 代码分析(4) ASN1_item_ex_d2i
    OPENSSL
    ASN1_AUX
    ASN1_ITEM

  • 相关阅读:
    方差分析
    Rust 指定安装目录
    perl 子函数传入多个数组
    perl 获取目录信息
    R绘图布局包 customLayout
    C语言 自定义函数按行读入文件2
    C语言 自定义函数按行读入文件
    C语言按行读入文件
    sed删除指定行
    mybatis 批量更新
  • 原文地址:https://www.cnblogs.com/anyboo/p/15728449.html
Copyright © 2011-2022 走看看