update.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * update.h: VLC PGP update private API
  3.  *****************************************************************************
  4.  * Copyright © 2007-2008 the VideoLAN team
  5.  *
  6.  * Authors: Rafaël Carré <funman@videolanorg>
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either release 2 of the License, or
  11.  * (at your option) any later release.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; if not, write to the Free Software
  20.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  21.  *****************************************************************************/
  22. /* Go reading the rfc 4880 ! NOW !! */
  23. /*
  24.  * XXX
  25.  *  When PGP-signing a file, we only sign a SHA-1 hash of this file
  26.  *  The DSA key size requires that we use an algorithm which produce
  27.  *  a 160 bits long hash
  28.  *  An alternative is RIPEMD160 , which you can use by giving the option
  29.  *      --digest-algo RIPEMD160 to GnuPG
  30.  *
  31.  *  As soon as SHA-1 is broken, this method is not secure anymore, because an
  32.  *  attacker could generate a file with the same SHA-1 hash.
  33.  *
  34.  *  Whenever this happens, we need to use another algorithm / type of key.
  35.  * XXX
  36.  */
  37. enum    /* Public key algorithms */
  38. {
  39.     /* we will only use DSA public keys */
  40.     PUBLIC_KEY_ALGO_DSA = 0x11
  41. };
  42. enum    /* Digest algorithms */
  43. {
  44.     /* and DSA use SHA-1 digest */
  45.     DIGEST_ALGO_SHA1    = 0x02
  46. };
  47. enum    /* Packet types */
  48. {
  49.     SIGNATURE_PACKET    = 0x02,
  50.     PUBLIC_KEY_PACKET   = 0x06,
  51.     USER_ID_PACKET      = 0x0d
  52. };
  53. enum    /* Signature types */
  54. {
  55.     BINARY_SIGNATURE        = 0x00,
  56.     TEXT_SIGNATURE          = 0x01,
  57.     /* Public keys signatures */
  58.     GENERIC_KEY_SIGNATURE   = 0x10, /* No assumption of verification */
  59.     PERSONA_KEY_SIGNATURE   = 0x11, /* No verification has been made */
  60.     CASUAL_KEY_SIGNATURE    = 0x12, /* Some casual verification */
  61.     POSITIVE_KEY_SIGNATURE  = 0x13  /* Substantial verification */
  62. };
  63. enum    /* Signature subpacket types */
  64. {
  65.     ISSUER_SUBPACKET    = 0x10
  66. };
  67. struct public_key_packet_t
  68. { /* a public key packet (DSA/SHA-1) is 418 bytes */
  69.     uint8_t version;      /* we use only version 4 */
  70.     uint8_t timestamp[4]; /* creation time of the key */
  71.     uint8_t algo;         /* we only use DSA */
  72.     /* the multi precision integers, with their 2 bytes length header */
  73.     uint8_t p[2+128];
  74.     uint8_t q[2+20];
  75.     uint8_t g[2+128];
  76.     uint8_t y[2+128];
  77. };
  78. /* used for public key and file signatures */
  79. struct signature_packet_t
  80. {
  81.     uint8_t version; /* 3 or 4 */
  82.     uint8_t type;
  83.     uint8_t public_key_algo;    /* DSA only */
  84.     uint8_t digest_algo;        /* SHA-1 only */
  85.     uint8_t hash_verification[2];
  86.     uint8_t issuer_longid[8];
  87.     union   /* version specific data */
  88.     {
  89.         struct
  90.         {
  91.             uint8_t hashed_data_len[2];     /* scalar number */
  92.             uint8_t *hashed_data;           /* hashed_data_len bytes */
  93.             uint8_t unhashed_data_len[2];   /* scalar number */
  94.             uint8_t *unhashed_data;         /* unhashed_data_len bytes */
  95.         } v4;
  96.         struct
  97.         {
  98.             uint8_t hashed_data_len;    /* MUST be 5 */
  99.             uint8_t timestamp[4];       /* 4 bytes scalar number */
  100.         } v3;
  101.     } specific;
  102. /* The part below is made of consecutive MPIs, their number and size being
  103.  * public-key-algorithm dependent.
  104.  *
  105.  * Since we use DSA signatures only, there is 2 integers, r & s, made of:
  106.  *      2 bytes for the integer length (scalar number)
  107.  *      160 bits (20 bytes) for the integer itself
  108.  *
  109.  * Note: the integers may be less than 160 significant bits
  110.  */
  111.     uint8_t r[2+20];
  112.     uint8_t s[2+20];
  113. };
  114. typedef struct public_key_packet_t public_key_packet_t;
  115. typedef struct signature_packet_t signature_packet_t;
  116. struct public_key_t
  117. {
  118.     uint8_t longid[8];       /* Long id */
  119.     uint8_t *psz_username;    /* USER ID */
  120.     public_key_packet_t key;       /* Public key packet */
  121.     signature_packet_t sig;     /* Signature packet, by the embedded key */
  122. };
  123. typedef struct public_key_t public_key_t;
  124. /**
  125.  * Non blocking binary download
  126.  */
  127. typedef struct
  128. {
  129.     VLC_COMMON_MEMBERS
  130.     update_t *p_update;
  131.     char *psz_destdir;
  132. } update_download_thread_t;
  133. /**
  134.  * Non blocking update availability verification
  135.  */
  136. typedef struct
  137. {
  138.     VLC_COMMON_MEMBERS
  139.     update_t *p_update;
  140.     void (*pf_callback)( void *, bool );
  141.     void *p_data;
  142. } update_check_thread_t;
  143. /**
  144.  * The update object. Stores (and caches) all information relative to updates
  145.  */
  146. struct update_t
  147. {
  148.     libvlc_int_t *p_libvlc;
  149.     vlc_mutex_t lock;
  150.     struct update_release_t release;    ///< Release (version)
  151.     public_key_t *p_pkey;
  152.     update_download_thread_t *p_download;
  153.     update_check_thread_t *p_check;
  154. };