NAME
    OpenSocialX::Shindig::Crypter - OpenSocial Shindig Crypter
VERSION
    version 0.03
SYNOPSIS
        use OpenSocialX::Shindig::Crypter;
        my $crypter = OpenSocialX::Shindig::Crypter->new( {
            cipher => 'length16length16',
            hmac   => 'forhmac_sha1',
            iv     => 'anotherlength16k'
        } );
        my $token = $crypter->create_token( {
            owner    => $owner_id,
            viewer   => $viewer_id,
            app      => $app_id,
            app_url  => $app_url,
            domain   => $domain,
            module_id => $module_id
        } );
DESCRIPTION
    Apache Shindig  is an OpenSocial
    container and helps you to start hosting OpenSocial apps quickly by
    providing the code to render gadgets, proxy requests, and handle REST
    and RPC requests.
    From the article
    , we know that we can do 'Application' things in Perl.
    basically the stuff will be
    *   use Perl OpenSocialX::Shindig::Crypter (this module) to create st=
        encrypted token through "create_token"
    *   the php "BasicBlobCrypter.php" will unwrap the token and validate
        it. The file is in the "php" dir of this .tar.gz or you can download
        it from
        
        you can copy it to the dir of "extension_class_paths" defined in
        shindig/config/container.php, it will override the default
        "BasicBlobCrypter.php" provided by shindig.
        and the last thing is to defined the same keys in
        shindig/config/container.php like:
          'token_cipher_key' => 'length16length16',
          'token_hmac_key' => 'forhmac_sha1',
          'token_iv_key'   => 'anotherlength16k',
        remember that "token_iv_key" is new
  METHODS
    *   new
            my $crypter = OpenSocialX::Shindig::Crypter->new( {
                cipher => 'length16length16',
                hmac   => 'forhmac_sha1',
                iv     => 'anotherlength16k'
            } );
        "cipher" and "iv" must be 16 chars.
    *   create_token
            my $token = $crypter->create_token( {
                owner    => $owner_id,
                viewer   => $viewer_id,
                app      => $app_id,
                app_url  => $app_url,
                domain   => $domain,
                module_id => $module_id
            } );
        if you don't know what "module_id" is, you can leave it alone.
    *   wrap
            my $encrypted  = $crypter->wrap({
                a => 1,
                c => 3,
                o => 5
            } );
        encrypt the hash by Crypt::Rijndael and Digest::SHA and
        encode_base64 it
    *   unwrap
            my $hash = $crypter->unwrap($encrypted);
        decrypt the above data
    *   deserialize
    *   checkTimestamp
    *   _serializeAndTimestamp
  EXAMPLE
        use URI::Escape;
        use MIME::Base64;
        use OpenSocialX::Shindig::Crypter;
        my $crypter = OpenSocialX::Shindig::Crypter->new( {
            cipher => $config->{opensocial}->{cipherKey},
            hmac   => $config->{opensocial}->{hmacKey},
            iv     => $config->{opensocial}->{ivKey},
        } );
        my $security_token = uri_escape( encode_base64( $crypter->create_token( {
            owner   => $owner_id,
            viewer  => $viwer_id,
            app     => $gadget->{id},
            domain  => $config->{opensocial}->{container},
            app_url => $gadget->{url},
        } ) ) );
        # later in tt2 or others
        # st=$security_token
AUTHOR
      Fayland Lam 
COPYRIGHT AND LICENSE
    This software is copyright (c) 2009 by Fayland Lam.
    This is free software; you can redistribute it and/or modify it under
    the same terms as perl itself.